使用异步创建新的 Promise

问题描述 投票:0回答:2

所以我有很多承诺,我正在尝试像这样批量完成:

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
造成了问题。非常感谢任何帮助。

javascript node.js asynchronous promise
2个回答
3
投票

当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);
}

0
投票

您需要

return resolve()
,否则代码将继续运行到“if”之后。

© www.soinside.com 2019 - 2024. All rights reserved.