【发布时间】:2019-05-29 08:17:05
【问题描述】:
我是 Promises 的新手,在解决原始 Promise 之前等待嵌套的 Promise 完成所有执行的概念有点麻烦。
原始代码
function getSomething(text) {
return new Promise(function (resolve, reject) {
getElse(text).then(function (items) {
if (items.length !== 0) {
/* Stuff here */
getElseElse(box).then(function (moreItems) {
/* Stuff here */
return array;
}.then(function (array) {
var promise = new Promise(function (resolve, reject) {
/* anotherFunction() is asynchronous */
result = anotherFunction(array); <-- Spot 1
});
promise.then(function () { });
});
return resolve(result); <--- Spot 2
}
else {
return resolve(null);
}
});
});
};
更新的代码 - 更好,但仍不能完全按照我的意愿工作。
function getSomething(text) {
return getElse(text).then(function (items) {
if (items.length !== 0) {
/* Stuff here */
return getElseElse(box).then(function (moreItems) {
/* Stuff here */
return array;
}).then(anotherFunction);
} else {
return null;
}
});
}
然后,在单个视图页面中,我有这个:
getSomething(text).then(function (result) {
/* Do something here using result */
/* But result is undefined and I think still pending */
});
我已经在 Thomas 的帮助下优化了原始函数,但视图内的原始调用似乎在result 制定之前仍在继续。
我希望 getSomething() 完全完成并返回 result,然后再执行视图内的 .then 内的代码。到目前为止,这还没有实现。
我发现了几篇文章指出了我认为Promise.all 的正确方向,但我似乎无法真正了解这些信息,所以我希望有人可以帮助解释我的具体情况情况。
有帮助的帖子是:
- Promise Chain not waiting for promises to resolve before ending
- Wait until nested promises resolve
- Wait for promises inside Promise.all to finish before resolving it
解决方案
Thomas 在标记的答案中解决了原始问题。经过进一步检查,最终问题在anotherFunction() 内部解决。
原来:
function anotherFunction(array) {
return new Promise(function (resolve, reject) {
return anotherGet(parcels).then(function (list) {
/* Do stuff here without a return */
});
});
}
固定版本:
function anotherFunction(array) {
return anotherGet(parcels).then(function (list) {
/* Do stuff here */
return list;
});
}
【问题讨论】:
-
我认为您首先不需要将其包装在 Promise 中;你已经收到了来自
getElse()的承诺;只是返回。同样,.then()处理程序可以返回getElseBox()Promise。 -
问题中不清楚:
anotherFunction()是异步的吗? -
@MarkMeyer 我很抱歉,但确实如此。我会将其添加到帖子中。
-
更新了问题,希望能更好地表达问题。
标签: javascript promise nested