假设我有类似的代码:
app.get('/url', (req, res) => {
if (req.some_magic == 1) {
do_1();
}
});
function do_1() {
let requests = get_requests();
setTimeout(function() { request({
"uri": "url",
"method": "POST",
"json": rq
}, (err, res, body) => {
do_1();
})}, 1000})
}
基本上,对于到达/url
的某些请求,我必须将一堆请求发送到某些服务。我如何才能使此异步,这样其他人来/url
的其他请求就不必等待do_1
完成了?或者Node已经像那样工作了?如果是,您是否需要任何快速解释或教程以了解其工作原理?我来自LEMP,所以完全不同。非常感谢。
几乎所有涉及从Node外部获取数据的功能(例如网络请求或文件读取)都将使用异步功能。该函数的文档应该告诉您(或至少暗示它说该函数返回Promise或接受回调函数作为参数)。
您提供的示例显示request
模块接受回调函数。
主要例外是明确定义为同步的函数(例如fileWriteSync。]
如果需要显式释放主事件循环,则可以使用worker thread。非常罕见,您需要执行此操作,而最主要的需求是在JS中执行CPU密集型计算时(这些计算不会移植到已经异步的库中)。
您可以设置函数async
,以便它不会阻止其他代码:app.get('/ url',(req,res)=> {如果(req.some_magic == 1){do_1();}});
async