最佳答案
我在 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的值,如下所示:
if(//somecondition) {
urlToCall = //Url1;
} else if(//someother condition) {
urlToCall = //Url2;
} else {
urlToCall = //Url3;
}
问题是,除了 urlToCall的值之外,urllib.request中的所有语句都将保持不变。所以我需要把这些公共代码放到一个函数中。我尝试相同,但在 doCall将总是返回我 undefined。我试过这样做:
response = doCall(urlToCall);
console.log(response) //Prints undefined
但是如果我在 doCall()中打印值,它会完美地打印出来,但是它总是返回 undefined。根据我的研究,我知道我们不能从回调函数返回值!(这是真的吗) ?如果是的话,有没有人可以告诉我如何处理这种情况,因为我想防止重复的代码在每个 if-else块。