You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不使用async/await解析Axios返回的Promise?

不用async/await解析Axios返回的Promise完全可行!

当然可以!async/await本质上只是Promise的语法糖,你完全可以用Promise原生的.then()/.catch()链式调用来处理Axios返回的异步结果——甚至你的bing_web_search函数本身已经在这么做了😉

你的函数已经返回了Promise

先看你的bing_web_search函数:它返回的是Axios请求后的Promise链,.then()会把解析后的response.data.webPages作为新Promise的结果返回,.catch()则捕获请求中的错误。所以在控制器里调用它时,直接链式调用.then()就能拿到数据,根本不需要async/await。

控制器中的调用示例

比如你的控制器函数可以这么写:

// 控制器里的处理函数(普通函数,无需async)
function handleSearchRequest(req, res) {
  const searchTerm = req.query.search;
  
  // 调用bing_web_search,用.then处理成功结果
  bing_web_search(searchTerm)
    .then(webPagesData => {
      // 拿到解析后的webPages数据,做后续业务处理
      console.log('搜索结果:', webPagesData);
      res.status(200).json({ success: true, results: webPagesData });
    })
    .catch(error => {
      // 捕获请求过程中出现的所有错误(包括Axios请求失败、函数内部抛出的错误)
      console.error('搜索出错:', error);
      res.status(500).json({ success: false, message: '搜索请求失败,请稍后重试' });
    });
}

优化你的错误处理

注意你的原函数中.catch()只做了console.log(error),这样错误不会传递到调用方的.catch()里。建议修改一下,让Promise在出错时明确reject,这样调用方可以统一处理错误:

let bing_web_search = function(search) {
  let searchEncoded = encodeURIComponent(search);
  return axios.get(
    'https://api.cognitive.microsoft.com/bing/v7.0/search?q=' + searchEncoded + '+site:https://learn.microsoft.com/en-us/azure/&mkt=en-us',
    { headers: { 'Ocp-Apim-Subscription-Key' : process.env.BING_SUBSCRIPTION_KEY } }
  )
  .then(function(response) {
    return response.data.webPages;
  })
  .catch(function(error) {
    console.log(error);
    // 将错误抛出,让调用方的catch能捕获到
    return Promise.reject(error);
  });
}

原理说明

Promise的核心就是通过链式调用处理异步操作:

  • .then()会在Promise成功resolve时执行,接收resolve的结果作为参数
  • .catch()会在Promise被reject时执行,接收错误信息作为参数
  • 整个链式调用的每一步都会返回一个新的Promise,所以可以一直链式写下去

async/await只是把这种链式写法转换成了类似同步代码的风格,底层还是Promise机制,所以不用它完全没问题。

内容的提问来源于stack exchange,提问作者A. Cam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:30:16