节点承诺和返回值

取缔

我一直在努力增强对JavaScript的承诺和异步性的理解。我知道下面的示例将无法按预期工作,并且“ someStuff”将返回一个空数组。我也相信我理解这是因为“ doPromise”不会阻塞,因此循环会在“ doPromise”解析之前完成并返回一个空数组。

我不了解的是如何以适当的方式完成此示例中表达的相同功能。

我想我的问题是:这样做的“正确”方法是什么?提前致谢!

function doPromise(number){
    return new Promise((resolve,reject)=>{
        resolve(number + 10);
    });
}

function someStuff(){
    var values = [];
    for(var i = 0; i < 10;i++){
        doPromise(i).then((sum)=>{
            values.push(sum);
        });
    }
    return values;
}

console.log(someStuff());
贝吉

“ doPromise”不会阻塞,因此循环会完成,并在解析任何“ doPromise()”之前返回一个空数组。

是。这也意味着您无法同步返回结果数组,只能在所有promise解决后才能获取值。因此,您的someStuff函数也是异步的,因此它应该返回一个promise(用于结果数组)。

要从一个promise数组中获得对结果数组的promise,可以使用该Promise.all函数。

function someStuff() {
    var promises = [];
    for (var i=0; i<10; i++) {
        promises.push(doPromise(i));
    }
    return Promise.all(promises);
}

someStuff().then(values => {
    console.log(values);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章