从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

回到顶部