Javascript 具有node.js等待的Q异步库
我真的很难在nodejs中使用Q模块 下面是我的代码。它在runnable.com上运行得很好,但当我将它放入我的一个控制器方法(按原样)中时,它只是一直在等待,我可以告诉它调用的第一个方法。但它一直在等待。我做错了什么。我已经花了两天时间在这上面了:( 更新: 将Q.ninvoke更改为Q.invoke,并使用Q的v2.0,这不再可用。我发现错误invoke未定义 改为使用Q的v1.0,现在下面的工作很好Javascript 具有node.js等待的Q异步库,javascript,node.js,asynchronous,q,mean-stack,Javascript,Node.js,Asynchronous,Q,Mean Stack,我真的很难在nodejs中使用Q模块 下面是我的代码。它在runnable.com上运行得很好,但当我将它放入我的一个控制器方法(按原样)中时,它只是一直在等待,我可以告诉它调用的第一个方法。但它一直在等待。我做错了什么。我已经花了两天时间在这上面了:( 更新: 将Q.ninvoke更改为Q.invoke,并使用Q的v2.0,这不再可用。我发现错误invoke未定义 改为使用Q的v1.0,现在下面的工作很好 var Q = require('q'); function Apple(type)
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);
});
,需要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);
});
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);
});
注意:因为您没有使用Node.js样式的方法,所以应该像这样使用而不是Q.ninvoke
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);
});
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);
});
事实上,这两种情况下都不会执行then块!请直接从我的重点帮助:“
ninvoke
使用给定的变量参数调用Node.js样式的方法,如果该方法返回结果,则返回满足的承诺,如果返回错误,则返回拒绝的承诺。”-YourgetInfo()
两者都不起作用,所以这当然永远不会起作用。@Tomalak你说的getInfo()是什么意思什么都不做。文档中的那句话真的再清楚不过了。我甚至在我的评论中把相关部分加粗了。那么void函数如何工作呢?非常感谢!!要么文档不清楚,要么我是一个完全的noob。我不得不更改它,因为它已被弃用。@user3428172的版本是什么q
您使用的是?@user3428172您得到的确切错误是什么?invoke未定义或类似。我可以看到github说2.0是实验性的,所以我应该使用1?@user3428172请用确切的错误信息编辑问题,只有这样我才能帮助您:(