首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在for循环中创建的Promise之后使用Promise.all()

如何在for循环中创建的Promise之后使用Promise.all()
EN

Stack Overflow用户
提问于 2017-02-12 03:31:48
回答 3查看 1.7K关注 0票数 0

我有一个foo()函数,它包含一个在for循环中解析的Promise。我想多次运行foo(),每次都给它不同的参数。然后我想用所有这些结果做点什么。Promise.all()是在for循环结束时运行,还是在foo()内部的所有Promises返回之后运行?或者它会说“这些foo()都不是承诺!”嘲笑我?

代码语言:javascript
运行
复制
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,当iterable参数中的所有promise都已解析时,该promise将解析,或者以第一个传递的promise拒绝的原因拒绝。”

这个视频https://www.youtube.com/watch?v=RRgAdi3gX-s真的很擅长解释基本的承诺,但我似乎试图做一些架构师没有打算/期望的事情。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-12 03:40:11

推送承诺到一个数组,来自fooreturn数组,在.then()内的函数中省略(),以避免立即调用函数。在foo()调用中使用扩展元素将promises的单个数组返回给链接到Promise.all().then()

代码语言:javascript
运行
复制
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));
票数 2
EN

Stack Overflow用户

发布于 2017-02-12 03:37:46

是的,这就对了。这是Promise.all()的签名

代码语言:javascript
运行
复制
Promise.all<T>: (Iterable<Promise<T>): Promise<T[]>

基本上,它接受一个可迭代的承诺,并返回一个承诺。

通过传递foo()的结果,预计foo()本身将返回一个Promise,否则它将无法工作。

票数 1
EN

Stack Overflow用户

发布于 2017-02-12 03:37:57

是的,foo()需要返回一个承诺。您可以将每个promise添加到一个数组中,并使用Promise.all等待所有它们:

代码语言:javascript
运行
复制
var foo = x => {
    var results = [];

    for (var i = 0; i < 100; i++) {
        results.push(
            someOtherFunctionThatReturnsAPromise(x)
                .then(returnSomething)
        );
    }

    return Promise.all(results);
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42180299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档