私は次のようなことをするコードを書いていました:
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
コンストラクタアンチパターン」と呼ばれていると誰かから言われました。このコードの何が悪いのですか、なぜこれがアンチパターンと呼ばれているのですか?
catch
ブロックがあるのgetStuffDone
はアンチパターンですか?
Promise
例では.then
、.catch
ハンドラーとハンドラーに不要な関数ラッパーも用意されています(つまり、それだけの可能性があり.then(resolve).catch(reject)
ます)。アンチパターンの完全な嵐。
getStuffDone
理解するために、関数ラッパーを(左ではなく、右のコンテキストで)削除して、Promiseリテラルだけを使用することを確認できますか?