节点和快递。返回给用户并继续执行

Kit*_*ler 4 javascript node.js express async-await

我习惯于接受用户请求、处理它并响应结果。

然而,我有一个 API 端点,它需要对各种数据库、日志记录、电子邮件等进行大约 10 件事,所有这些都是异步的。只有第一个数据库调用需要成功,用户才能获得响应。剩下的可以继续。

问题是整个过程可能需要 10/20 秒,因此当用户只需要在第一个数据库查询(大约 100 毫秒)后得到答案时,他们会等待 10/20 秒。

我基本上需要

  • 用户提出请求
  • 发生异步数据库调用
  • 如果失败,则会向用户发出错误,但如果成功,则会返回成功
  • 用户可以自由地继续做他们需要做的事情,但服务器继续进行一些其他数据库调用

我对所有异步调用使用 async wait 并表达为我的 Web 框架。

Han*_*ian 9

因为您说过“只有第一个数据库调用需要成功,用户才能获得响应。其余的可以继续。” 我想你已经得到了你需要的东西,所以假设你正在使用 async wait,让我们这样做:

async function requestHandler(req){
    await result = firstDatabaseRequestThatIsImportant();
    setOfAsyncFunctions(result);
    return result;
}

async function setOfAsyncFunctions(result){
    asyncFunction1(?????)
    asyncFunction2(?????)
}
Run Code Online (Sandbox Code Playgroud)

所以基本上不要使用await,这样setOfAsyncFunctions该函数将在不同的线程中运行,并且您可以立即将结果返回给用户。也许这会对您的问题陈述有所帮助?