javascript - Node.js 使用 Promise 来处理来自另一个函数的请求

标签 javascript node.js

我的 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/

相关文章:

node.js - 计算日期范围的重叠量

javascript - 如何水平自动滚动轮播(jquery)

javascript - 如何在闭包中乘以数字

javascript - 创建一个用于长时间计算的加载屏幕

javascript - Express.js - 请求者域/IP 可靠性

javascript - 为什么mongodb的find()方法无法找到Nodejs中最近插入的文档

javascript - 如何找到哪个 javascript 代码触发了 ajax?

javascript - 提交表单会触发一个 ajax 调用,该调用会在成功时发布到操作页面

node.js - Windows 服务器上的 Node-cron

node.js - azure Blob 的奇怪行为