我正在编写代码,执行以下操作:
function getStuffDone(param) { | function getStuffDone(param) {
var d = Q.defer(); /* or $q.defer */ | return new Promise(function(resolve, reject) {
// or = new $.Deferred() etc. | // using a promise constructor
myPromiseFn(param+1) | myPromiseFn(param+1)
.then(function(val) { /* or .done */ | .then(function(val) {
d.resolve(val); | resolve(val);
}).catch(function(err) { /* .fail */ | }).catch(function(err) {
d.reject(err); | reject(err);
}); | });
return d.promise; /* or promise() */ | });
} | }
有人告诉我这分别称为“ 延迟反模式 ”或“ Promise
构造函数反模式 ”,这段代码有什么不好之处,为什么又将其称为反模式?
Esailija创造的递延反模式(现在是显式构造反模式)是一个新的对诺言做出新承诺的普通反模式人,当我第一次使用诺言时,我自己就做出了。上面代码的问题是无法利用承诺链的事实。
承诺可以与之连锁,
.then
您可以直接返回承诺。您的代码getStuffDone
可以重写为:承诺都是关于使异步代码更具可读性,并且在不隐藏该事实的情况下像同步代码一样起作用。承诺表示对一次操作值的抽象,它们抽象出一种编程语言中的语句或表达式的概念。
仅在将API转换为Promise且无法自动执行时,或者在编写以这种方式表示的聚合函数时,才应使用延迟对象。
报价Esailija: