首页 > 解决方案 > async 和 await 调用一个 api 来响应,

问题描述

我有一个看起来像这样的功能,

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))

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

标签: javascriptnode.jsasync-awaitpromise

解决方案


您正在使用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);
   }

推荐阅读