【发布时间】:2019-02-12 15:29:36
【问题描述】:
我正在尝试扩展我的 nodejs 应用程序,以便它可以同时有效地处理多个请求。实现这一点的一种方法是通过代码优化,我想知道如何使耗时的请求异步,承诺是唯一的方法吗?还是有其他机制可以达到同样的效果?
我已经将 Promise 用于异步任务,但据我了解 Promise,真正的异步部分是 then 和 catch 处理程序。当创建一个 promise 时,executor 函数将由主线程执行,直到它执行一些异步任务(setTimeout 等)。
发送邮件示例代码
app.route('/api/contact/sendEmail')
.post((req, res) =>{
sendEmail(req).then( () =>{
res.status(200);
res.json({
sent: true
});
}).catch(emailError=> {
//Custom error send bad request.
if(emailError.code === 900) {
res.status(400);
res.json({
errorCode: emailError.code,
message: emailError.message
});
}else {
res.status(500);
res.json({
errorCode: emailError.code
});
}
});
});
线程不会被阻塞来发送响应,但是直到 sendEmail 没有到达实际的异步部分,主线程才会被阻塞
【问题讨论】: