Nodejs,异步模块函数调用

时间:2015-05-13 11:06:03

标签: node.js asynchronous

var output = "";
//Make article Record.

async.parallel([function (callback) {
    Article.save(Article, function (err, member) {
        //console.log("member : " + member);
        if (err) {
            console.log(err);
            output = 1;
        } else {
            console.log("Create article record success");
            output = 2;
        }
        callback();
    });
}], function (err, result) {
    console.log("log 1 : " + output);
    res.send(output);
    console.log("log 2 : " + output);
});

嗨,我在使用async lib时遇到了麻烦。

我可以

log 1:2

log 2:2来自最后2个console.log。

res.send(output)未被解雇。当我用res.send("2")替换它时,它有效。

但是,res.send(output)无效,我的Android应用生成SocketTimeoutException,因为未发送回复。

问题是什么?帮助我。

2 个答案:

答案 0 :(得分:0)

对于此任务,您不需要async.parallel(并行执行函数,并在最后一次执行execiting call callback之后)。

请参阅async documentation

Article.save(Article, function (err, member) {
  //console.log("member : " + member);
  if (err) {
    console.log(err);
    return res.send(err);
  }

  console.log("Create article record success");
  res.send("Create article record success");
});

您也不需要全局变量output

答案 1 :(得分:0)

您的问题仅仅是因为您尝试发送一个号码,res.send会将其作为状态代码(并且无效)。请尝试更改以下代码:

output = 1;output = "1";output = 2;output = "2";相同。

请参阅有关res.send的文档,并查看不支持的数字:

  

res.send([body]) body参数可以是Buffer对象,String,对象或Array。

显然async.parallel在这种情况下完全无关紧要,但我只是假设你真的想要这个而不是做出设计决定。