【问题标题】:How to handle the async for loop in node js如何处理节点js中的异步for循环
【发布时间】:2018-04-16 09:36:46
【问题描述】:

在 node.js 中处理循环的更好方法是什么?例如,在下面的代码中,我将值插入到新数组中。但是我返回 Promise 的方式似乎是处理循环的不正确方式,那么他们有更好的选择吗?

let userProfileScore = [];
return new Promise(function (resolve, reject) {
    for (let i = 0; i < userArr.length; i++) {
        user.userProfile(userArr[i], (err, score) => {
            if (err) throw err;
            userProfileScore.push({
                userID: userArr[i],
                value: sco
            });
            if (i == userArr.length - 1) {  // Here I am checking the key and then resolving the promise .
                resolve(userProfileScore);
            }
        });
    }
});

【问题讨论】:

标签: node.js for-loop ecmascript-6 es6-promise


【解决方案1】:

您可以使用 Promise.all 处理在回调中创建的承诺列表,这是处理调用异步函数列表的一种方法:

let promiseList = userArr.map((userObj) => {
    return new Promise((resolve, reject) => {
        user.userProfile(userObj, (err, score) => {
            if (err) {
                reject(err);
            } else {
                resolve({ userID: userObj, value: score});
            }
        })
    })
});

Promise.all(promiseList).then((result) => {
   console.log(result);
}).catch ((err) => {
   console.error(err);
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2021-09-11
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多