我真的在nodejs中的Q模块上苦苦挣扎。
这是我的下面的代码。它在runnable.com上可以正常工作,但是当我将其放在一个控制器方法中(按原样)时,它一直处于等待状态,我可以告诉它调用的第一个方法。但它一直在等待。我究竟做错了什么。我已经花了两天了:(
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样式方法接受一个回调函数,该函数将在错误或执行结果时被调用。
因此,如果您可以将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);
});