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

如何对现有Node.js代码进行async await语法改造

async/await 改造方案

改造核心逻辑:将返回Promise的异步操作前加await,包裹await的函数声明为async,用try/catch替代原有的.catch错误捕获逻辑,同时可以移除冗余的手动Promise封装。


1. Express 路由接口改造

// 给路由回调函数加async声明
app.express.get('/api/member/logout', async function (request, response) {
  try {
    // await 等待异步方法返回结果
    const result = await functionBal.logout(request.query.abc)
    if (result) {
      response.set('Content-Type', 'application/json');
      response.status(200);
      response.json(result);
    }
  } catch (err) {
    // 捕获所有异步错误
    response.set('Content-Type', 'application/json');
    response.status(400);
    response.json("Error   -- " + err);
  }
});

2. 业务层log函数改造(原代码中调用functionDal.log的版本)

原代码中手动封装Promise属于冗余操作,内部调用的方法已经返回Promise,可以直接简化:

module.exports.log = async function (abc) {
  const result = await functionDal.log(abc)
  if (result) {
    return result
  } else {
    throw "Error"
  }
};

3. 数据层MySQL操作log函数改造

同样移除冗余的手动Promise封装,直接用async/await简化链式调用:

module.exports.log = async function (abc) {
  // 等待获取数据库连接
  const con = await mySqlConnection.connection()
  // 等待SQL执行完成
  await con.query("UPDATE member SET table1 = 0 WHERE abc = ?", [abc])
  return 'success'
};

注意事项

  • 实际项目中两个同名的module.exports.log需要放在不同层级的文件中(比如业务层bal目录、数据层dal目录),避免后者覆盖前者
  • Express的异步路由建议配合全局异步错误处理中间件使用,防止未捕获的异常导致服务挂死

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:15:04