当前位置: 首页 > 知识库问答 >
问题:

ES6 javascript如何处理异步/等待函数序列中的错误

岳茂
2023-03-14

我正在测试一个任务中的三个异步/等待函数(functionA、functionB、functionC)的条件序列,但是当我执行它时,声明第一个functionA不应该通过,

1-我没有得到预期的功能a失败消息

2-当任何函数没有传递时,我应该如何处理错误来停止序列?

 functionB: functionB passed
 functionC: functionC passed
 task ended
async function functionA(duration, shouldPass) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (shouldPass) {
        resolve('functionA passed');
      } else {
        reject(Error('functionA failed'));
      }
    }, duration);
  });
}

async function functionB(duration, shouldPass) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (shouldPass) {
        resolve('functionB passed');
      } else {
        reject(Error('functionB failed'));
      }
    }, duration);
  });
}

async function functionC(duration, shouldPass) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (shouldPass) {
        resolve('functionC passed');
      } else {
        reject(Error('functionC failed'));
      }
    }, duration);
  });
}

async function executeAsyncTask(condition1, condition2, condition3) {
  let resultFunctionA = true
  if (condition1) {
    resultFunctionA = await functionA(3000, true)
    console.log('functionA: ', resultFunctionA)
  }
  let resultFunctionB = true
  if (resultFunctionA && condition2) {
    resultFunctionB = await functionB(3000, true)
    console.log('functionB: ', resultFunctionB)
  }
  let resultFunctionC = true
  if (resultFunctionB && condition3) {
    resultFunctionC = await functionC(3000, true)
    console.log('functionC: ', resultFunctionC)
  }
  console.log('task ended')
}

// running task with condition1, condition2, condition3 parameters
executeAsyncTask(false, true, true)

共有1个答案

堵彬彬
2023-03-14

1-我没有得到预期的功能a失败消息

因为您的条件1false而没有调用函数A

2-当任何函数没有传递时,我应该如何处理错误来停止序列?

async function functionA(duration, shouldPass) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (shouldPass) {
        resolve('functionA passed');
      } else {
        reject(Error('functionA failed'));
      }
    }, duration);
  });
}

async function functionB(duration, shouldPass) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (shouldPass) {
        resolve('functionB passed');
      } else {
        reject(Error('functionB failed'));
      }
    }, duration);
  });
}

async function functionC(duration, shouldPass) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (shouldPass) {
        resolve('functionC passed');
      } else {
        reject(Error('functionC failed'));
      }
    }, duration);
  });
}

async function executeAsyncTask(condition1, condition2, condition3) {
  try {
    let resultFunctionA = await functionA(3000, condition1)
    console.log('functionA: ', resultFunctionA)
    let resultFunctionB = await functionB(3000, condition2)
    console.log('functionB: ', resultFunctionB)
    let resultFunctionC = await functionC(3000, condition3)
    console.log('functionC: ', resultFunctionC)
    console.log('task ended')
  } catch (err) {
    console.error(err.message)
  }
}

// running task with condition1, condition2, condition3 parameters
executeAsyncTask(false, true, true)
 类似资料:
  • 我正试图将图像上传到firebase存储,但调用该函数时,未执行wait以获取url。我错过了什么? 看看这个其他主题,我发现问题可能是“然后”,但我如何设置代码以等待url? 异步/等待/然后飞镖/颤振 谢谢

  • 问题内容: 我对后端非常熟悉。但是我遇到了一种情况,我必须在前端使用它。 我正在获取对象的数组,并且在那些对象中我获取了位置。现在,我可以获取单个地名,但是我想在map函数中使用该名称来获取地名。因此,正如我们所知道的那样,我必须在那边使用。 这是代码 但是,当我在此处将map函数与async一起使用时,它不会返回任何内容。谁能帮我解决我的问题? 谢谢!!! 问题答案: 您应该始终将获取数据等关注

  • 问题内容: 我的代码在javascript中看起来像这样: 在完成所有这些异步调用之后,我想计算所有数组的最小值。 我要如何等待所有人? 我现在唯一的想法是拥有一个名为done的布尔数组,并在第i个回调函数中将done [i]设置为true,然后说while(不是全部都完成了){} 编辑:我想一个可能但很丑陋的解决方案是在每个回调中编辑完了的数组,然后如果每个回调中都设置了所有其他完成,则调用一个

  • 我正在努力找出以下语法的问题: 我一直得到错误说: 等待是一个保留字 ...但是在异步函数中不合法吗? 调度位来自report-thunk库。

  • 我使用async/await ecma6标准,没有任何自定义库。 我现在不知道如何正确地捕捉和抛出错误。我有多个async/await函数,如果下面某个地方发生了严重错误,我希望将错误抛出到所有async函数的顶部,并停止函数的执行。 我试图抛出异常的异步/等待函数,并抓住它在目标函数,但我得到一个错误,在node.js: (节点:13964)未处理的PromisejectionWarning:未

  • 我想使用异步并等待处理承诺。我想在下面的示例中使用这个方法: 在执行时,它给了我一个错误 错误: UnhandledPromiseRejectionWarning:未处理得承诺拒绝.这个错误可能是由于抛出一个没有catch块的异步函数内部,或者是由于拒绝了一个未用.catch()处理的承诺。(拒绝ID:3)