我有一个函数 foo(),其中包含一个在 for 循环内解析的 Promise。我想运行 foo() 几次,每次都给它不同的参数。然后我想利用所有这些的结果做一些事情。 Promise.all() 会在 for 循环结束时运行,还是在 foo() 内的所有 Promise 返回后运行?或者它会说“这些 foo() 都不是 Promise!”还 mock 我?
var foo = (x) => {
for (var i = 0; i < 100; i++) {
someOtherFunctionThatReturnsAPromise(x).then(returnSomething());
}
};
function nowDoEverything() {
return Promise.all([foo(1), foo(2), foo(3)]).then(doSomethingWithAllThoseReturnedValues());
}
nowDoEverything();
foo() 需要返回 Promise 吗?如果是这样,考虑到 foo() 内部的 Promise 是在 for 循环内生成的,我该怎么做?
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/all指出 “Promise.all(iterable) 方法返回一个 promise ,当可迭代参数中的所有 promise 都已解决时,该 promise 将得到解决,或者由于第一个传递的 promise 被拒绝而被拒绝。”
该视频https://www.youtube.com/watch?v=RRgAdi3gX-s确实很擅长解释基本的 Promise,但我似乎正在尝试做一些建筑师没有打算/预期的事情。
最佳答案
将 promise 推送到数组,return
来自 foo
的数组,省略()
来自 .then()
内的函数以避免立即调用函数。使用扩展元素 foo()
调用以返回单个 promise 数组 .then()
链接到Promise.all()
.
var foo = (x) => {
var arr = [];
for (var i = 0; i < 100; i++) {
arr.push(someOtherFunctionThatReturnsAPromise(x).then(returnSomething));
}
return arr
};
function nowDoEverything() {
return Promise.all([...foo(1), ...foo(2), ...foo(3)])
.then(doSomethingWithAllThoseReturnedValues)
}
nowDoEverything()
.catch(err => console.log(err));
关于javascript - 如何在 for 循环中创建 Promise 后使用 Promise.all(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42180299/