Learnyounode,具有回调函数 - Juggling Async

时间:2015-05-14 20:31:13

标签: javascript node.js

我对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)

2 个答案:

答案 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" .....)