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

Node.js/Koa:如何等待API调用完成后再返回响应?

解决Koa路由中异步API调用导致的404错误

你的推测完全正确!问题出在你使用了Airtable SDK的回调形式,而await关键字只能等待Promise对象,无法等待回调函数执行完成。这就导致Koa的路由中间件在触发API调用后直接结束流程,还没等API返回结果就继续往下走,此时ctx.body还没被设置,所以返回了404错误。

解决方案:改用Airtable SDK的Promise形式

Airtable的Node.js SDK本身支持Promise风格调用——只要你不传入回调函数,它的方法就会返回一个Promise,这样就能用async/await正确等待异步操作完成了。

修改后的完整代码如下:

const KoaRoute = require('koa-route');
const Koa = require('koa');
const app = new Koa();
var Airtable = require('airtable');
var base = new Airtable({apiKey: 'keyI6rZxwsXXXXXXX'}).base('appXXXXXX');

app.use(KoaRoute.get('/callapi', async function (ctx) {
  try {
    // 移除回调函数,直接await Promise返回的结果
    const record = await base('Couples').find('reclnxjiMeSljrzP0');
    console.log('Retrieved', record.id);
    ctx.body = "Record ID from API: " + record.id;
  } catch (err) {
    // 捕获API调用可能出现的错误,避免中间件崩溃
    console.error('Error retrieving record:', err);
    ctx.status = 500;
    ctx.body = 'Failed to fetch data from Airtable';
  }
}));

app.listen(3000);
console.log('listening on port 3000');

关键改动说明:

  • 去掉base('Couples').find()的回调参数,让方法返回Promise,这样await才能生效
  • 用try/catch块包裹异步操作,处理API调用可能出现的网络错误、权限错误等异常,同时给客户端返回合理的错误状态码和提示

这样修改后,Koa会等待Airtable API调用完成后再设置ctx.body并返回响应,404的问题就解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:17