javascript - 如何在 for 循环中创建 Promise 后使用 Promise.all()

标签 javascript promise

我有一个函数 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/

相关文章:

javascript - 自动显示列表的jquery函数

javascript - 使用 Jasmine 和 AngularJS 未刷新的请求

promise - Puppeteer 的 chromium 打开时出现错误并停止了 puppeteer 脚本

javascript - React 的 promise

javascript - q.all 似乎表现不同,为什么?

javascript - $scope 是否总是 Angular 中的方法定义所必需的

javascript - 如何将定义的函数传递到 jQuery 单击事件中?

javascript - 如何在 ng-repeat 中使用anchorScroll() 在索引 x 处启动 View

javascript - 我应该使用原生 ES6 Promises + polyfill 还是自定义 Promise 库?

javascript - 扩展 jQuery 时,this 和 $(this) 如何最终相同?