从Node.js中的回调函数返回值
我在从Node.js中的回调函数返回值时遇到了小麻烦,我将尝试尽可能轻松地解释我的情况。考虑一下我有一个片段,它包含URL,并命中该URL,并提供输出:
urllib.request(urlToCall, { wd: 'nodejs' }, function (err, data, response) { var statusCode = response.statusCode;
finalData = getResponseJson(statusCode, data.toString());
});
我试图将其包装在函数中并返回如下值:
function doCall(urlToCall) {urllib.request(urlToCall, { wd: 'nodejs' }, function (err, data, response) {
var statusCode = response.statusCode;
finalData = getResponseJson(statusCode, data.toString());
return finalData;
});
}
因为在我的Node.js代码中,我有很多if-else
语句urlToCall
将决定value的值,例如:
if(//somecondition) { urlToCall = //Url1;
} else if(//someother condition) {
urlToCall = //Url2;
} else {
urlToCall = //Url3;
}
关键是a内的所有语句urllib.request
将保持相同,除了的值urlToCall
。因此,绝对需要将这些通用代码放入函数中。我尝试了同样的方法,但是indoCall
总是会回报我undefined
。我这样尝试过:
response = doCall(urlToCall);console.log(response) //Prints undefined
但是,如果我在doCall()
其中打印值,则可以完美打印,但始终会返回undefined
。根据我的研究,我知道我们无法从回调函数返回值!(是真的)吗?如果是,那么任何人都可以建议我如何处理这种情况,因为我想防止每个if-
else块中都有重复的代码。
回答:
其undefined
原因是,console.log(response)
运行doCall(urlToCall);
完毕。您还必须传递一个回调函数,该回调函数在您的
请求 完成时运行。
首先,您的功能。向其传递回调:
function doCall(urlToCall, callback) { urllib.request(urlToCall, { wd: 'nodejs' }, function (err, data, response) {
var statusCode = response.statusCode;
finalData = getResponseJson(statusCode, data.toString());
return callback(finalData);
});
}
现在:
var urlToCall = "http://myUrlToCall";doCall(urlToCall, function(response){
// Here you have access to your variable
console.log(response);
})
@Rodrigo,在评论中发布了很好的资源。阅读有关节点中的 回调 及其工作方式的信息。请记住,它是异步代码。
以上是 从Node.js中的回调函数返回值 的全部内容, 来源链接: utcz.com/qa/429468.html