如何在node.js中实际使用Q promise?

这可能是一个noob问题,但我是新的承诺,并试图找出如何在node.js中使用Q.

我看到教程开始于

promiseMeSomething() .then(function (value) {}, function (reason) {}); 

但是我没有把握到底是从哪里来的。 我想这是从

 var outputPromise = getInputPromise() .then(function (input) {}, function (reason) {}); 

getInputPromise()从哪里来? 我以前没有提到它。


我已经把它包含在我的项目中了

 var Q = require('q'); // this is suppose, the async function I want to use promise for function async(cb) { setTimeout(function () { cb(); }, 5000); } async(function () { console.log('async called back'); }); 

如何在我的例子中使用Q和它的。

promiseMeSomething()将返回一个Q promise对象,然后它将在其中定义 ,如下所示

 Promise.prototype.then = function (fulfilled, rejected, progressed) { 

创build一个Promise对象最简单的方法就是像这样使用Q函数构造函数

 new Q(value) 

将创build一个新的承诺对象。 然后你可以像这样连接成功和失败的处理程序

 new Q(value) .then(function(/*Success handler*/){}, function(/*Failure handler*/){}) 

而且,如果你将一个单独的nodejs风格的函数传递给.then函数,它将以这样的成功值调用该函数

 callback(null, value) 

或者如果有问题的话

 callback(error) 

对于你的特定情况, setTimeout接受被调用的函数作为第一个参数。 所以,需要很less的代码才能使它真正符合promise。 所以, Q有一个方便的function,为此, Q.delay ,可以这样使用

 var Q = require('q'); function async() { return Q.delay(1000) } async() .then(function() { console.log('async called back'); }); 

你可以像这样写得更短

 Q.delay(1000) .then(function() { console.log('async called back'); }); 

如果你想用其他值调用callback函数,那么你可以这样做

 Q.delay(1000, "Success") .then(function(value) { console.log('async called back with', value); }); 

如果要在两个函数之间有一个延迟,而第二个函数依赖于第一个函数,这将会很有用。