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

如何在Node.js+Express中用ES2016 async/await实现变量赋值?

解决Express中异步请求的await使用问题

嘿,我明白你的问题啦——你现在的代码里config.options()是异步操作,但你直接把它传给console.log再res.send,这时候异步操作还没完成,拿到的肯定不是你想要的返回值对吧?别着急,咱们一步步改:

首先,你需要把Express路由的回调函数改成async函数,这样才能在里面用await等待异步操作的结果。然后用await去获取config.options()的返回值,还要记得处理可能出现的错误,避免服务器挂掉。

修改后的代码示例

app.get('/super', async function(req, res) {
  try {
    // 用await等待异步操作完成,拿到实际返回值
    const result = await config.options();
    console.log(result);
    // 把结果发送给客户端
    res.send(result);
  } catch (error) {
    // 捕获异步操作中的错误,返回错误信息给客户端
    console.error('请求出错:', error);
    res.status(500).send('服务器内部错误');
  }
});

关键要点说明

  • 必须把路由回调声明为async函数,这是使用await的前提
  • await只能等待返回Promise的函数,所以你的config.options()内部必须被包装成Promise。如果原来的XMLHttpRequest是回调式的,可以这样包装:
    // 举个例子,把XHR包装成Promise
    function makeXHRRequest(url) {
      return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();
        xhr.open('GET', url);
        xhr.onload = function() {
          if (xhr.status >= 200 && xhr.status < 300) {
            resolve(xhr.responseText);
          } else {
            reject(new Error(`请求失败,状态码:${xhr.status}`));
          }
        };
        xhr.onerror = function() {
          reject(new Error('网络请求出错'));
        };
        xhr.send();
      });
    }
    // 然后config.options()可以调用这个函数并返回Promise
    

这样改完之后,代码就会等待异步请求完成,拿到返回值之后再继续执行后续的逻辑,你就能把结果赋值给变量、用于后续编程啦~

内容的提问来源于stack exchange,提问作者user3424387

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:53:08