この質問はおそらく何百万回も聞かれると思いますが、とにかく試してみます. そのため、私は Python と Ruby に慣れており、命令型コード ブロックとオブジェクトとメソッドを「ブロック」し、参加したプロジェクトのためにこの新しいノードのことを学ぼうとしています。試してみてください。非同期コールバックと戻り値の受け渡しについて頭を悩ませることはできません。
これが私のコードです:
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 は私の出力を印刷しますが、関数を介してバブルアップするためのリターンを得ることができません。私は同期の方法で何かを呼び出し、非同期の方法で何かを呼び出していることを知っていますが、これを完全に整理することはできません。確かにこれを 1 つの大きな関数に入れることもできますが、ハッキングするのではなく、これを正しく実行しようとしています。
とにかく初心者の質問で申し訳ありません-私は機能的であると同時にOOP +命令的であろうとしているように感じます-私は他の多くの例を見ますが、カルトを積み込んだり、メアリーを歓迎したりしないようにしています。