我需要用我自己的函数扩展q.promise,我试过:
defer = q.defer();
defer.promise.prototype.funcName = function () {
// my function
}
女巫返回以下错误:
TypeError: Cannot set property 'funcName' of undefined
我应该如何正确地扩展q.promise
?
这是我的实际问题:我需要.then()
的别名,将操作名称作为参数(而不是函数),并根据内部函数库执行该操作。
答案 0 :(得分:3)
Q.makePromise
是您要扩展的主要Promise函数。正如@minitech在评论中提到的那样,可以在source
要创建别名,请说after
then
,Q.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();