gpt4 book ai didi

javascript - 在解析原始 Promise 之前等待嵌套 JS Promise 完成

转载 作者:行者123 更新时间:2023-11-28 12:57:28 25 4
gpt4 key购买 nike

我是 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;
}
});
}

然后,在单独的 View 页面内,我有以下内容:

getSomething(text).then(function (result) {
/* Do something here using result */
/* But result is undefined and I think still pending */
});

我已经使用 Thomas 的帮助优化了原始函数,但在制定 结果 之前, View 内的原始调用似乎仍在继续。

我希望在执行 View 内 .then 内的代码之前,getSomething() 完全完成并返回 结果 。到目前为止,这还没有实现。

我发现了几篇文章,它们指出了我认为的 Promise.all 的正确方向,但我似乎无法真正获得这些信息,所以我希望有人可以帮助解释我的具体情况。

有帮助的帖子是:

  1. Promise Chain not waiting for promises to resolve before ending
  2. Wait until nested promises resolve
  3. Wait for promises inside Promise.all to finish before resolving it

解决方案

托马斯在标记的答案中解决了最初的问题。经过进一步检查,最终问题在 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/Deferred 反模式。你很少需要创建自己的 Promise,通常你有一些返回 Promise 的函数;使用它。

其次,为了让外部 Promise 等待需要的 PRomise,您需要将该嵌套 Promise 返回到外部 Promise。
then() 内部返回一个 Promise 将使生成的 Promise 解析为您在内部重新调整的 Promise 的值。

最后,像 .then(value => value).then(value => Promise.resolve(someFunction(value))) 这样的东西是没有意义的。您对 anotherFunction 的包装基本上只是传递参数并返回结果。

因此,您的伪代码应如下所示:

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;
}
});
}

关于javascript - 在解析原始 Promise 之前等待嵌套 JS Promise 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54010474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com