【发布时间】:2014-06-13 22:18:54
【问题描述】:
我在从 Node.js 中的回调函数返回值时遇到了小麻烦,我会尽量简单地解释我的情况。考虑我有一个 sn-p,它获取 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 块中的重复代码。
【问题讨论】:
-
“是真的吗?” - 是的,当然。
-
@JanDvorak,所以除了复制代码我别无选择? ;)
-
传递一些你自己的回调会有帮助吗?我相信是的。
-
我认为这个链接可以帮助你理解它是如何工作的:github.com/maxogden/art-of-node#callbacks
-
@RodrigoMedeiros 感谢您提供出色的资源。我正在经历它,它帮助了我很多:)
标签: javascript node.js