Q与node.js等待的asynchronous库

我真的很困扰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); }); 

Q.ninvoke ,期望一个Node.js风格的方法。 Node.js样式方法接受一个callback函数,并且该函数将被调用,出错或执行结果。

所以,如果你可以改变你的getInfo函数来接受一个callback函数,并且在返回结果时调用它,那么你的程序将会工作。

 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); });