【问题标题】:async and await call an api for a response,async 和 await 调用一个 api 来响应,
【发布时间】:2021-03-16 02:52:34
【问题描述】:

我有一个看起来像这样的函数,

const addItem = async(req, res, next) => {
    const itemApi = new Connector({
        url: '/item',
        method: 'POST',
        headers: {},
        body: {item: "item name"}
    });
    try {
       const response = await itemApi.call();
       if(response.data && response.data.errors) {
           return response.data.errors;
       } else {
         return response.data;
       }
   } catch(error) {
      console.log(error);
   }

我是这样调用这个方法的,

addItem(req, res, next)
   .then((response) => console.log(response))
   .catch((error) => console.log(error))

即使api返回错误,似乎总是调用then并且从不调用catch?我做错了吗?

【问题讨论】:

  • addItem 捕获错误。
  • .catch() 只会在函数抛出错误时被调用。
  • 所以如果我不尝试/捕捉它会起作用吗?
  • 您指的是哪种错误?它不会捕获response.data.errors,因为您正常返回它。但如果 API 抛出异常,它应该可以工作。
  • API 正在返回 422 响应代码和错误对象

标签: javascript node.js async-await promise


【解决方案1】:

您正在使用 try/catch block 但没有从 catch 块中抛出错误,因此函数调用的 .catch 不会执行,因为异步函数中不存在未处理的错误

你可以抛出错误,它会按照你的预期工作

const addItem = async(req, res, next) => {
    const itemApi = new Connector({
        url: '/item',
        method: 'POST',
        headers: {},
        body: {item: "item name"}
    });
    try {
       const response = await itemApi.call();
       if(response.data && response.data.errors) {
           return response.data.errors;
       } else {
         return response.data;
       }
   } catch(error) {
      console.log(error);
      throw new Error(error);
   }

【讨论】:

    猜你喜欢
    • 2017-10-26
    • 2020-11-12
    • 2021-11-18
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    相关资源
    最近更新 更多