问题描述
我正在使用常规 for 循环迭代一个对象,这对我来说很好用。但是,我试图删除代码的所有 for 循环,转而使用数组迭代,但出于某种原因,我无法理解为什么在使用 forEach 时会得到不同的结果。
注意:这里的 forEach 来自一个叫做 p-iteration 的模块
https://www.npmjs.com/package/p-iteration
这很好用,它返回正确的值。
for await (const [key,value] of Object.entries(tatGroupedByRegion)) {
onTarget = 0;
notOnTarget = 0;
const cases = [];
await forEach(value,async email => {
if (!cases.includes(email.new_name)) {
cases.push(email.new_name);
isOnTarget(email);
}
});
backlogData[key].tatd1 = percentage(onTarget,notOnTarget);
tatd1Total.value += parseInt(percentage(onTarget,notOnTarget),10);
if ((parseInt(percentage(onTarget,notOnTarget) !== 0),10)) {
tatd1Total.count += 1;
}
}
这不起作用,这部分backlogData[key].tatd1 = percentage(onTarget,notOnTarget)
,一遍又一遍地返回相同的值。
await forEach(Object.entries(tatGroupedByRegion),async ([key,value]) => {
onTarget = 0;
notOnTarget = 0;
const cases = [];
await forEach(value,10)) {
tatd1Total.count += 1;
}
});
解决方法
exports.forEach = async (array,callback,thisArg) => {
const promiseArray = [];
for (let i = 0; i < array.length; i++) {
if (i in array) {
const p = Promise.resolve(array[i]).then((currentValue) => {
return callback.call(thisArg || this,currentValue,i,array);
});
promiseArray.push(p);
}
}
await Promise.all(promiseArray);
};
这是您正在使用的 forEach
的实现。回调接收 this
作为第一个参数,这可能是一个问题。