将HTTP正文从一个函数传递到另一个nodeJS

时间:2018-12-01 07:49:16

标签: node.js function callback request return-value

我正在使用nodeJS请求包,并且想将JSON从一个函数返回到另一个函数。 目前,我的解决方案是:

var request = require('request');

function A() {
   var url = "---";
   var headers = { 'data': '---' };
   var resp = request.get({ url: url, headers:headers }, function (e, r, 
   body)
    {
      console.log(body)
    });
  return response;
}
function B() {
   data = A();
   console.log("recived data");
   console.log(data);
}
B();

我遇到了回调,但是我对如何使用它们感到非常困惑。我来自python背景。我很困惑如何将身体从FuncA放回FuncB。因为在这种情况下,我没有收到想要的尸体。它为我提供了一些数据,例如事件JSON,回调JSON等。

2 个答案:

答案 0 :(得分:-1)

您可以如下使用async/awaitrequest-promise

var request = require('request-promise');

async function A() {
   var url = "---";
   var headers = { 'data': '---' };
   var resp = await request.get({ url: url, headers:headers });
  return response;
}

async function B() {
   data = await A();
   console.log("recived data");
   console.log(data);
}

B();

答案 1 :(得分:-1)

您可以将回调视为在完成某些操作(通常而言)后调用的函数。在您的示例中,回调是此函数:

function (e, r, 
   body)
    {
      console.log(body)
    }

因此,您需要在该回调内部返回,因为那是从请求中获取响应的时间。在您的示例中,您在实际返回响应之前就返回了响应,因为即使您尚未收到响应,代码也将继续执行并命中return语句。另外,变量response不存在。

上面的Amir解决方案是一种干净而不错的方法。是使用基于Promises的非常新的async / await语法。我建议您同时查看这两个概念,但是回调在JS中仍然很常见(可能是最常见的),因此了解它们很重要。

如果要在示例中使用回调,请尝试以下操作:

var request = require('request');

function A(callback) {
   var url = "---";
   var headers = { 'data': '---' };
   var resp = request.get({ url: url, headers:headers }, function (e, r, 
   body)
    {
      console.log(body)
      callback(r); // Here, we send the response to the callback function
    });

}
function B() {
   A(function(data) { // this is the callback function sent to A()
       console.log("recived data");
       console.log(data);
   });
}
B();

(尽管我目前无法自己测试此代码,所以可能会有一些错别字。)

编辑:如果要使用在函数B中获得的数据,则可以像这样将其传递给回调函数:

function B(callback) {
    A(function(data) { // this is the callback function sent to A()
        console.log("recived data");
        console.log(data);
        callback(data);
   });
}

要使用功能B中的数据:

B(function(data) {
  // do something with the data here
});