我在从 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;
}
问题是 a 中的所有语句urllib.request都将保持不变,除了 的值urlToCall。所以我肯定需要把这些通用代码放在一个函数中。我也试过,但 indoCall总是会回报我undefined。我试过这样:
response = doCall(urlToCall);
console.log(response) //Prints undefined
但是如果我在里面打印 valuedoCall()会完美打印,但它总是会返回undefined. 根据我的研究,我开始知道我们不能从回调函数返回值!(是真的吗)?如果是,任何人都可以建议我如何处理这种情况,因为我想防止每个if-else块中的重复代码。