我的情况:
我有一个基于node.js express框架的服务端get接口,该接口会调用其他API并且这些API耗时较长(大约2秒左右)。我通过回调函数来调用此函数,并触发res.send作为回调函数的一部分。res.send对象封装了一个在从这些耗时API调用中收到结果后创建的对象。因此,只有当我从API调用中获取到所有信息时,才能发送res.send。
以下是一些代表性的代码。
以下是一些代表性的代码。
someFunctionCall(params, callback)
{
// do some asyncronous requests.
Promise.all([requestAsync1(params),requestAsync2(params)]).then
{
// do some operations
callback(response) // callback given with some data from the promise
}
}
app.get('/',function(req, res){
someFunctionCall(params, function(err, data){
res.send(JSON.stringify(data))
}
}
我想要的
我希望我的服务器能够处理其他并行的get请求,而不会因为其他函数中的REST API调用而被阻塞。但问题在于,只有当承诺得到实现时,回调才会被发出,这些操作都是异步的,但我的线程将等待所有操作的执行。而且Node在没有执行前一个请求的res.send或res.end的情况下不接受下一个get请求。当我有多个请求进来时,每一个请求都会一个接一个地执行,这就成为一个问题。
注意:我不想使用集群方法,我只想知道是否可以在没有集群的情况下做到这一点。
setTimeout(callback, t)
完全相同。在等待回调的同时,node.js中的其他事情也可以正常运行。 - jfriend00.then()
处理程序的 Javascript 语法完全不正确。应该是Promise.all([requestAsync1(params),requestAsync2(params)]).then(function(response) {callback(response)});
。 - jfriend00