Node.js 是否将来自请求模块的数据从函数中传递出去?

Node.js 是否将来自请求模块的数据从函数中传递出去?,node.js,function,asynchronous,return,Node.js,Function,Asynchronous,Return,我正在开发一个模块,该模块使用请求模块返回从http请求检索到的数据。但是,当我想将数据从函数中传递出去时,我遇到了一个问题。以这个为例 function getData(term) { var parsedData request.post(url, term, (err, response, body) => { if (!err && response.statusCode == 200) { parsedD

我正在开发一个模块,该模块使用
请求
模块返回从http请求检索到的数据。但是,当我想将数据从函数中传递出去时,我遇到了一个问题。以这个为例

function getData(term) {
    var parsedData
    request.post(url, term, (err, response, body) => {
        if (!err && response.statusCode == 200) {
              parsedData = doSomethingTo(body);
        }
    });
    return parsedData;
}
此方法不起作用,因为函数getData()异步执行,并且在请求实际返回正确数据之前返回值

function getData(term) {
    var parsedData
    request.post(url, term, (err, response, body) => {
        if (!err && response.statusCode == 200) {
              parsedData = doSomethingTo(body);
              return parsedData;
        }
    });
}
这个方法也不起作用,因为它只会让请求函数返回解析后的数据,而不是getData函数


如何使父函数返回从请求函数解析的数据?

使用如下承诺:

function getData(term) {
    return new Promise(function(resolve){
      request.post(url, term, (err, response, body) => {
        if (!err && response.statusCode == 200) {
              var parsedData = doSomethingTo(body);
              resolve(parsedData);
        }
      });
   });
}
你可以这样调用你的函数:

getData(term).then(function(data){
   //console.log(data);
}) 

快速使用蓝鸟承诺模块

var Promise = require('bluebird');
function getData(term) {
return new Promise(function(resolve,reject){


     if (!err && response.statusCode == 200) {
          var parsedData = doSomethingTo(body);
          resolve(parsedData);
    }else{
    reject(err);
    }
});

}; 
然后调用函数的地方执行此操作

var promise = getData(term);
promise.then(function(data){console.log(data)}).catch(function(err){console.error(err)});

如果request.post是异步的,则必须将回调函数传递给使用parsedData执行的getData函数,或者使用Promiseplease始终通过网络激活错误。遵循这个模式。