gpt4 book ai didi

javascript - 从 Node.js 中的回调函数返回一个值

转载 作者:IT老高 更新时间:2023-10-28 21:50:34 26 4
gpt4 key购买 nike

我在从 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;
}

问题是 urllib.request 中的所有语句都将保持不变,除了 urlToCall 的值。所以我绝对需要把这些通用代码放在一个函数中。我尝试了相同的方法,但在 doCall 中总是会返回我 undefined。我试过这样:

response = doCall(urlToCall);
console.log(response) //Prints undefined

但如果我在 doCall() 中打印值,它会完美打印,但它总是会返回 undefined。根据我的研究,我知道我们不能从回调函数返回值! (是真的)?如果是,任何人都可以建议我如何处理这种情况,因为我想防止每个 if-else block 中的重复代码。

最佳答案

它的 undefined 因为 console.log(response)doCall(urlToCall); 完成之前运行。您还必须传入一个回调函数,该函数会在您的 request 完成时运行。

首先,您的功能。给它一个回调:

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,发布了 good resource在评论中。了解 Node 中的 回调 以及它们是如何工作的。请记住,它是异步代码。

关于javascript - 从 Node.js 中的回调函数返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23339907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com