如何在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); });
如果要在两个函数之间有一个延迟,而第二个函数依赖于第一个函数,这将会很有用。