我正在处理一个模块,该模块使用request
模块返回从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函数。
如何让父函数返回从请求函数解析的数据?
答案 0 :(得分:0)
像这样使用Promise:
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);
})
答案 1 :(得分:0)
非常快速地使用bluebird promise模块。
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)});