在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);
}
});
}
});
答案 0 :(得分:0)
您可以使用Promise.all来处理回调中创建的promise列表,这是处理异步函数列表的一种方法:
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);
})