Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当调用方不期望响应时使用“wait”_Javascript_Node.js_Express_Asynchronous_Async Await - Fatal编程技术网

Javascript 当调用方不期望响应时使用“wait”

Javascript 当调用方不期望响应时使用“wait”,javascript,node.js,express,asynchronous,async-await,Javascript,Node.js,Express,Asynchronous,Async Await,我有一个非常简单的express应用程序,它将从客户端接收到的信息存储到数据库中,几乎不需要任何处理。一些简化的代码来说明这一点: app.post(分析\u端点,异步(req,res)=>{ 试一试{ 等待插入TODB(请求正文) res.status(204.send(); }捕捉(错误){ 记录器错误(err); res.status(500.send(); } }); 此应用程序部署到google cloud run,每秒处理大量请求。我们注意到,从路由中删除wait关键字可以让每个容

我有一个非常简单的express应用程序,它将从客户端接收到的信息存储到数据库中,几乎不需要任何处理。一些简化的代码来说明这一点:

app.post(分析\u端点,异步(req,res)=>{
试一试{
等待插入TODB(请求正文)
res.status(204.send();
}捕捉(错误){
记录器错误(err);
res.status(500.send();
}
});
此应用程序部署到google cloud run,每秒处理大量请求。我们注意到,从路由中删除
wait
关键字可以让每个容器处理更多的请求,但缺点是不捕获错误-因此客户端将始终收到
204

wait的另一个用法是在
insertToDB
函数中,该函数再次简化如下:

const insertToDB=async(行)=>{
等待dbClient.insert(行);
}
正如您在这里看到的,我们还使用了
wait
,因为此操作返回一个承诺

所以问题是,我们是否应该等待来电者不期待回应?是否可以避免这些等待,我们的应用程序就能处理更多的吞吐量

编辑:
还有一个类似的问题。然而,我认为这是不同的,因为我最感兴趣的是理解为什么删除
wait
允许我处理每秒2/3倍的请求数。

您应该等待,因为您的db调用是
async
,所以您必须在返回到客户端之前等待插入

您可以简单地使用promise resolution,使其更加简洁明了:

app.post(ANALYTICS_ENDPOINT, async (req, res) => {
    insertToDB(req.body)
    .then(() => res.status(204).send())
    .catch(() => res.status(500).send());
});

这回答了你的问题吗?吞吐量取决于瓶颈。如果它是db,它保持不变,但是你对它的控制力变小了。无论结果如何,你都要做出成功的回应,或者等待承诺。如果不等待,显然很难检测到问题,因为在客户端它看起来很正常。在这种情况下,明显的问题是无法处理错误。如果异步作业与请求分离,至少要确保错误得到了处理,并且loggedIt不会出现。OP已经写了一个明确的问题,描述了他们真正想要问的问题。如果你试图回答他们问题的这一部分,那么问题是,当打电话的人不希望得到答复时,我们是否应该等待?你将被否决,因为他们实际上根本不想要讨论这个问题的答案。@jfriend00你在这里做的是什么?我想要的是答案,而不是一个关于通用编码最佳实践的段落,它可以概括为“您应该处理错误”。不过,我非常感谢你的答复。如何才能更简洁明了呢?async..await应该取代原始承诺,现在它们又回来了。“你应该等待”:这需要一个更有力的论据。是的,正如其他评论所提到的,没有对这些观点的解释。