我编写的代码看起来像:
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() */ | });
} | }
Run Code Online (Sandbox Code Playgroud)
有人告诉我这个被称为" 延迟反模式 "或" Promise构造函数反模式 ",这个代码有什么不好,为什么这被称为 …
我见过很多关于新EMCA承诺的教程,主张避免jQuery库中的"promises".他们通常说你可以通过做这样的事情来躲避他们:
Promise.resolve($.getJSON(url, params)); // voila! the jQuery promise is "gone"!
Run Code Online (Sandbox Code Playgroud)
但是,当我必须将两个异步jQuery函数链接在一起时,这并不真正起作用.如何在不使用jQuery的then()或.when()的情况下将两个getJSON调用(第二个调用依赖于第一个调用)链接在一起?
相反,我只想使用Promise.all等.
我认为一个类似的问题问题是交叉jquery和EMCA的承诺?