我意识到这个问题可能会被问一百万次,但无论如何我都会尝试。所以我习惯了 Python 和 Ruby 以及“阻塞”命令式代码块、对象和方法,并尝试为我加入的项目学习这个新奇的 Node 东西。尽我所能,我不能完全围绕异步回调和传递返回值。
这是我的代码:
var getAnHttp = function getAnHttp (args, callback) {
var req = http.request(args, callback);
req.on('error', function(errmsg) {
console.log('problem with request\t' + errmsg.message);
});
req.end();
};
var getWebPageBody = function getWebPageBody (res) {
var pageRes = "";
res.setEncoding('utf8');
res.on('data', function(requestBody) {
pageRes = requestBody;
console.log('[ DEBUG ] BODY:\t' + pageRes);
});
res.on('end', function() {
return pageRes;
});
};
exports.captureLink = function captureLink(targetLink) {
getAnHttp(targetLink, getWebPageBody);
};
实际上称之为:
var crawl = require('../grab_site');
var aGreatSite = { hostname : 'hotwebcrawlingaction.xxx',
port : 80,
path : '/asyncpron',
method : 'GET'
};
var something = crawl.captureLink(aGreatSite);
getWebPageBody 将打印我的输出,但我无法通过功能让我的回报冒泡。我知道我正在以同步方式调用某些东西,而有些则以异步方式调用,但我无法完全解决这个问题。虽然我当然可以把它放在一个大函数中,但我正在努力做到这一点,而不是破解它。
无论如何,对于一个菜鸟问题感到抱歉-我觉得我正在尝试同时具有功能性和 OOP+势在必行-我看到了很多其他示例,但我试图不去推销邪教或向玛丽致敬。