【发布时间】:2015-08-12 12:25:10
【问题描述】:
我正在尝试将多个调用链接到 AsyncStorage.getItem() 但似乎无法让调用以正确的顺序触发。我似乎设法退出循环,最后一个项目在早期项目之前完成。看来 React 使用的 promise 语法与 jQuery 的工作方式不同。
在此示例中,我尝试链接调用以获取 vars v1、v2、v3。 v3 触发需要 vars v1 和 v2 的 UI 刷新。我的两个链式变量的代码如下:
AsyncStorage.getItem("v1")
.then(
(value) => {
if (value !== null){
varCollection.v1 =value
}
}
)
.then( () => {
AsyncStorage.getItem("v3")
.then((value) => {
if (value !== null){
varCollection.v3 = value;
}else{
varCollection.v3 = "default value";
}
})
.done()
})
.done();
这似乎可行,但可能只是运气导致它在我向链中添加另一个链接时出现问题。
AsyncStorage.getItem("v1")
.then(
(value) => {
if (value !== null){
varCollection.v1 =value
}
}
)
.then( () => {
AsyncStorage.getItem("v2")
.then((value) => {
if (value !== null){
varCollection.v2 = value;
}
})
.done()
})
.then( () => {
AsyncStorage.getItem("v3")
.then((value) => {
if (value !== null){
varCollection.v3 = value;
}else{
varCollection.v3 = "default value";
}
})
.done()
})
.done();
这会导致 v3 更改并触发应用程序的状态更改,即使 v2 可能尚未分配。
从子元素的 getInitialState() 对 props.varCollection 中的每个 var 调用 console.log() 显示 v1 存在但 v2 不存在,反之亦然。我还尝试嵌套调用以创建我意识到很快就会变得混乱的链。
* 更新 * 除了 Slacks 和 Bergi 的建议,我还尝试了以下方法:
AsyncStorage.getItem("v1")
.then((value) => {
if (value !== null){
v1 = value;
}
})
.then( () =>{
return(
AsyncStorage.getItem("v2")
.then((value) => {
if (value !== null){
v2 = value;
}
})
)
})
.then( () => {
return(
AsyncStorage.getItem("v3")
.then((value) => {
if (value !== null){
v3 = value;
}
})
)
})
.done();
和
AsyncStorage.getItem("v1")
.then((value) => {
if (value !== null){
v1 = value;
}
})
.then( () =>
(
AsyncStorage.getItem("v2")
.then((value) => {
if (value !== null){
v2 = value;
}
})
)
)
.then( () =>
(
AsyncStorage.getItem("v3")
.then((value) => {
if (value !== null){
v3 = value;
}
})
)
)
.done();
但在第二次通话时仍然卡住。
* /更新 *
在 React Native 中链式异步调用的正确方法是什么?
【问题讨论】:
-
你需要将 Promise 返回到链中。
-
我该怎么做?
标签: javascript promise react-native