与node.js等待的Q异步库

时间:2014-03-21 01:30:18

标签: javascript node.js asynchronous q mean-stack

我真的在使用nodejs中的Q模块。

这是我的代码如下。它在runnable.com上工作正常但是当我把它放在我的一个控制器方法中时(就像),它只是在等待,我可以告诉它调用第一个方法。但它只是在等待。我究竟做错了什么。我现在已经花了2天时间:(

var Q = require('q');

function Apple (type) {
    this.type = type;
    this.color = "red";

    this.getInfo = function() {
        console.log(this.color);
        return;
    };
}

var apple = new Apple('macintosh');
apple.color = "reddish";

var stat = Q.ninvoke(apple, 'getInfo').then(function() { console.log(err) });

更新

将Q.ninvoke更改为Q.invoke并使用Q的v2.0,这已不再可用。我得到错误调用未定义。

更改为使用Q的v1.0,现在以下工作正常。

var Q = require('q');

function Apple(type) {
    this.type = type;
    this.color = "red";

    this.getInfo = function() {
        return this.color;
    };
}

var apple = new Apple('macintosh');
apple.color = "reddish";

Q.invoke(apple, 'getInfo')
    .then(function(color) {
        console.log(color);
    })
    .fail(function(err) {
        console.log(err);
    });

1 个答案:

答案 0 :(得分:1)

Q.ninvoke,需要一个Node.js样式方法。 Node.js样式方法接受一个回调函数,该函数将随错误或执行结果一起调用。

因此,如果您可以更改getInfo函数以接受回调函数并在必须返回结果时调用它,那么您的程序将起作用,就像这样

var Q = require('q');

function Apple(type) {
    this.type = type;
    this.color = "red";

    this.getInfo = function(callback) {
        return callback(null, this.color);
    };
}

var apple = new Apple('macintosh');
apple.color = "reddish";

Q.ninvoke(apple, 'getInfo')
    .then(function(color) {
        console.log(color);
    })
    .fail(function(err) {
        console.error(err);
    });

注意:由于您没有使用Node.js样式方法,因此您应该使用Q.invoke代替Q.ninvoke这样

var Q = require('q');

function Apple(type) {
    this.type = type;
    this.color = "red";

    this.getInfo = function() {
        return this.color;
    };
}

var apple = new Apple('macintosh');
apple.color = "reddish";

Q.invoke(apple, 'getInfo')
    .then(function(color) {
        console.log(color);
    })
    .fail(function(err) {
        console.log(err);
    });