所以我有很多承诺,我正在尝试像这样批量完成:
let promises = [];
let fixedValues = [];
let shouldIQuit = false;
let value = {
b: 1
};
promises.push(
new Promise(async (resolve, reject) => {
const shouldquit = await shouldIQuit(shouldIQuitValue);
if(shouldquit === true) {
const fixedValue = await Values.fixThisValue(value);
if(!fixedValue.a) {
resolve();
}
fixedValues.push(fixedValue);
}
resolve();
});
await Promise.all(promises);
其他功能可以做任何事情,但我需要等待这两个功能。它应该首先调用
shouldIquit
函数,检查该值,然后等待 fixThisValue
的结果,然后确定是否应该将该数字放入数组中,我需要并行执行所有这些操作。
但是,我注意到有时当
fixedValue
在没有 fixedValue.a
的情况下返回并且它成功命中 if 中的 resolve();
时,它仍然会在应该的时候将固定值推入数组 fixedValues
't。我认为这是承诺中的async
造成了问题。非常感谢任何帮助。
当fixedValue返回时没有fixedValue.a并且成功命中resolve()时;在 if 中,它仍然会在不应该的情况下将固定值推入数组fixedValues
我认为您希望
resolve()
作为返回语句(退出函数)。
const fixedValue = await Values.fixThisValue(value);
if(!fixedValue.a) {
resolve();
}
fixedValues.push(fixedValue);
resolve()
不退出该功能。您可以更新代码以提前退货
if(!fixedValue.a) {
resolve();
return;
}
fixedValues.push(fixedValue);
或者您可以添加一个
else
块
if(!fixedValue.a) {
resolve();
} else {
fixedValues.push(fixedValue);
}
您需要
return resolve()
,否则代码将继续运行到“if”之后。