我的 Node 服务器需要与其他服务器连接才能获取一些信息并将其发送给用户。由于在这种情况下请求是异步的,我通常使用附加库,例如 request-promise。但在这里,我收到了来自多个点的多个调用,因此我创建了一个函数来处理它们,但此解决方案不起作用。
apiCall1: function(req,res){
var info = fetchFromOtherServer();
console.log(info); // undefined
res.send(info)
}
apiCall2: function(req,res){
var info = fetchFromOtherServer();
console.log(info); // undefined
res.send(info)
}
function fetchFromOtherServer(){
var options = {"method":"POST", "headers":{...},"uri":"{...}"}
request(options, function(err,response,body){
if(!err && response.statusCode == 200){
console.log(body) // here is a body from other server
return body;
}
}
}
所以首先我得到一个对函数 apiCall() 的 api 调用,它调用 fetchFromOtherServer 函数。但在请求完成之前, Node 将信息变量标记为未定义并将其发送给用户。如何更改代码以告诉 Node 等待,直到收到其他服务器的响应?
最佳答案
您需要自己的 Promise,并且您需要对您的 Promise 使用 then 处理程序。 看看promise documention 以及他们的例子。
apiCall1:
function(req,res){ var info_promise = fetchFromOtherServer();
info_promise.then(function(info) {
console.log(info); // undefined
res.send(info)
});
# Also look into catch on promises for error
}
function fetchFromOtherServer(){
return new promise(function(resolve, fail){
var options = {"method":"POST", "headers":{...},"uri":"{...}"}
request(options, function(err,response,body){
if(!err && response.statusCode == 200){
console.log(body) // here is a body from other server
resolve( body);
}
}
});
}
关于javascript - Node.js 使用 Promise 来处理来自另一个函数的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46396470/