React Native:尝试分配给只读属性

boz*_*mob 5 javascript javascript-objects reactjs react-native

我试图检查该条目是否存在于 AsycStore 中,如果不存在,则创建一个对象并设置它。\n并且有一个返回语句返回数据对象。

\n\n

这是伪代码-

\n\n
AsyncStorage.getItem("dataobject").then((do) => {\n  if(do == undefined)\n  {\n    console.log("initializing obj + setting data");\n    var dobj = "data object";\n    dobj.isdirty = true;\n    AsyncStorage.setItem("dataobject",dobj);\n  }\n  return AsyncStorage.getItem("dataobject");\n}).done();\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在控制台中收到错误 -

\n\n
W/ReactNativeJS: \'Error: Attempted to assign to readonly property.\\n stack: \\n  <unknown>\n\nindex.android.bun\xe2\x80\xa6:53047\\n  tryCallOne                           \nindex.android.bun\xe2\x80\xa6:5094\\n  <unknown>                            \nindex.android.bun\xe2\x80\xa6:5160\\n  <unknown>                            \nindex.android.bun\xe2\x80\xa6:3399\\n  callTimer                            \nindex.android.bun\xe2\x80\xa6:2954\\n  callImmediates                       \nindex.android.bun\xe2\x80\xa6:3003\\n  <unknown>                            \nindex.android.bun\xe2\x80\xa6:2523\\n  guard                                \nindex.android.bun\xe2\x80\xa6:2452\\n  __callImmediates                     \nindex.android.bun\xe2\x80\xa6:2523\\n  <unknown>                            \nindex.android.bun\xe2\x80\xa6:2503\\n  guard                                \nindex.android.bun\xe2\x80\xa6:2452\\n  invokeCallbackAndReturnFlushedQueue  index.android.bun\xe2\x80\xa6:2501\\n URL: http://localhost:8081/index.android.bundle?platform=android&dev=true\\n line: 53047\\n message: Attempted to assign to readonly property.\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不太确定我要分配的只读属性是什么。被警告的行号是这一行 - "dobj.isdirty = true";

\n\n

我不应该向对象添加属性吗?我该如何解决这个问题?正确的做法是什么?

\n\n

截屏-

\n\n

尝试分配给只读属性 width=100

\n

Nad*_*bit 5

您可以通过使用 .catch 来完成此操作,如果那里没有值,则应该抛出异常。就像是:

AsyncStorage.getItem("dataobject")
.then((do) => {
  this.setState({
    myData: do.toJSON();
  })
})
.catch(() => {
   console.log("initializing obj + setting data");
   var dobj = {};
   dobj.isdirty = true;
   AsyncStorage.setItem("dataobject",JSON.stringify(dobj));
});
Run Code Online (Sandbox Code Playgroud)

  • 是的。类似的代码帮助我解决了这个问题:) 谢谢纳德。我也可以添加 catch 块。 (2认同)