如何在node.js中扩展q.promise?

时间:2015-06-27 07:27:03

标签: node.js promise

我需要用我自己的函数扩展q.promise,我试过:

defer = q.defer();
defer.promise.prototype.funcName = function () {
    // my function
}

女巫返回以下错误:

TypeError: Cannot set property 'funcName' of undefined

我应该如何正确地扩展q.promise

这是我的实际问题:我需要.then()的别名,将操作名称作为参数(而不是函数),并根据内部函数库执行该操作。

1 个答案:

答案 0 :(得分:3)

Q.makePromise是您要扩展的主要Promise函数。正如@minitech在评论中提到的那样,可以在source

中看到

要创建别名,请说after thenQ.makePromise.prototype.after = Q.makePromise.prototype.then; 所有您需要做的就是:

.after

然后您可以使用.then代替defer = Q.defer(); defer.resolve(1); defer.promise.after(console.log); //=> 1

.do
  

我需要.then()的别名,将操作名称作为参数(而不是函数),并根据内部函数库执行该操作。

这将创建一个Q.makePromise.prototype.do = function(operation){ return this.then(function(value){ console.log('Do', operation, 'with', value); }); }; 函数,该函数接受一个字符串并将其与promise解析后的值一起显示。

defer = Q.defer();
defer.resolve(1);
defer.promise.do('myoperation');
//=> Do myoperation with 1

然后你可以做

form.find('.form-group#' + key).addClass('has-error');
form.find('.form-group#' + key + ' .form-error').html(value[0]).fadeIn();