我对Node.js非常新,一般是javascript,还有函数式编程(如果我没有弄错,哪个节点?)
我目前正在进行learnyounode教程。 我知道我可以找到所有的解决方案并且工作得很好,但我有点好奇为什么我的代码不能工作......
如果有人熟悉我在“Juggling async”中停留的学习信息。
我写的代码:
var http = require("http");
var addriee = [process.argv[2], process.argv[3], process.argv[4]];
function getStuffFromNet(address, callback) {
http.get(address, function getShitDone(response) {
var dataToCallback = "";
response.on("error", function(data) {
callback(data, null);
});
response.on("data", function(data) {
dataToCallback+=data;
});
response.on("end", function(data) {
callback(null, dataToCallback);
});
});
};
function printToConsole(data) {
console.log(data);
}
printToConsole(getStuffFromNet(addriee[0]));
我的目标是重用可以获得“网络内容”的功能,我得到的错误是:
learnyounode run http-get3.js
undefined
/home/ubuntu/workspace/learnyounode/http-get3.js:17
callback(null, dataToCallback);
^
TypeError: undefined is not a function
at IncomingMessage.<anonymous> (/home/ubuntu/workspace/learnyounode/http-get3.js:17:7)
at IncomingMessage.emit (events.js:117:20)
at _stream_readable.js:944:16
at process._tickCallback (node.js:442:13)
答案 0 :(得分:0)
为什么最后一个回调为null而不是数据? 另外,初始化
可能更方便var dataToCallback =&#34;&#34;;
到
var dataToCallback;
因为否则您无法使用数据
typeof dataToCallback!==&#39; undefined&#39;
不确定atm。
还尝试评论您的代码更多。特别是当你正在学习它时。
我有一些调试级别的例子(noob与否我很快就会发现错误)
/** * Divest the desired amount */ socket.on("divest", function (amount) { error.debug(classname + "Divest is called [" + amount + "]");
invest.divest(hash, amount, function (err, callback) {
if (!err) {
error.debug(uid, name + " />divesting [CBACK]" + callback);
} else {
error.debug(uid, name + " />divesting [ERROR]" + err);
}
socket.emit("done", true);
});
});
希望我帮助过。
答案 1 :(得分:0)
为了解释您的情况,数据被读到最后并调用“callback
”,
但是,“callback
”未在脚本的最后一行定义。
如果你想知道为什么data.on("error" .....)
没有被触发,它只会被http.get()
的数据错误触发,这意味着你可以从URL中“可以读取数据”,所以http.get()
只会触发data.on("data" ....)
和data.on("end" .....)
。