从异步函数返回承诺

Returning promise from async function

可以保证像下面这样 returned 吗? catch 块 return 是一个 promise 还是一个正常的错误?

async function beforeProcessing(ctx) {
  try {
      let res = await validateList(ctx)
      return new Promise((resolve, reject) => {
          if (res && res.length > 0) {
              const customErr = new Error(`missing for ${res} types`);
              customErr.statusCode = 422;
              reject(customErr);
          }
          else {
              resolve();
          }
      })
  } catch (error) {
      return new Error(error);
  }
}

是的,但没有理由这样做。 async 履行 始终 return 承诺。只需内联处理该逻辑,然后抛出 customErr 以拒绝函数的承诺:

async function beforeProcessing(ctx) {
    let res;
    try {
        res = await validateList(ctx)
    } catch (error) {
        return new Error(error); // *** This is highly suspect
    }
    if (res && res.length > 0) {
        const customErr = new Error(`missing for ${res} types`);
        customErr.statusCode = 422;
        throw customErr;
    }
}

但是正如我在上面的评论中提到的,returning 一个错误对象是高度可疑的,它 满足 承诺错误而不是拒绝承诺。让错误传播到调用者(这将拒绝 async 函数的承诺):

async function beforeProcessing(ctx) {
    let res = await validateList(ctx)
    if (res && res.length > 0) {
        const customErr = new Error(`missing for ${res} types`);
        customErr.statusCode = 422;
        throw customErr;
    }
}

此外,if 条件与错误消息相比看起来很奇怪。错误消息使条件看起来应该是 <= 0,而不是 > 0,但当然我可能在那里推断不正确。