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

时间:2018-03-27 10:18:13

标签: javascript node.js express async-await

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

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

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

我基本上需要

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

我正在使用异步等待所有异步调用并表达为我的Web框架。

1 个答案:

答案 0 :(得分:2)

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

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

async function setOfAsyncFunctions(result){
    asyncFunction1(?????)
    asyncFunction2(?????)
}

所以基本上不要在setOfAsyncFunctions上使用等待,以便此函数将在不同的线程中运行,您可以立即将结果返回给用户。也许这可以帮助您解决问题陈述?