【发布时间】:2014-08-31 14:03:47
【问题描述】:
我最近下载了一个使用 ES6 Promises 的库。由于我想部署到不支持 Promises 的浏览器,所以我还下载了 polyfill。
因为我已经包含了 jQuery,所以我考虑为 Promise 编写一个 polyfill,它在内部使用 jQuery 的 Deferred。
我编写了这个简单的 polyfill,足以满足我的特定用例:
window.Promise = function(cb){
var promise = $.Deferred();
cb(promise.resolve, promise.reject);
return promise.promise();
};
问题在于它没有涵盖整个规范(认为Promise.all() 缺失)。
在我投入大量时间之前,我想知道是否可以使用 jQuery 的 Deferred 为 Promise 编写完整的 polyfill。还是有一些无法复制的功能?
【问题讨论】:
-
我记得有人说 jquery 的 deferred 不能很好地遵守承诺规范,所以使用其他东西可能会更好。
-
我也听说过,但我似乎记得更多的是关于 jQuery 的函数如何使用承诺,而不是关于一般的 Deferred。但我可能错了。
-
就我个人而言,我会使用你已经拥有的 polyfill,并保持 jQuery Deferreds/Promises 良好且真正分离,除非你不可避免地不得不将它们混合在一起。
-
@Thomas 可以在不使用 jquery 的情况下撰写作品,包括不同用途的实现;
when、done、callback等。也许创建预期实施的流程图,并带有项目实施目标的文档。使用 js 没有 jquery 的简短文章,其中包括when和done;.then是原生承诺,可链接 stackoverflow.com/a/23587868 。如果可能,能否描述将提供哪些处理功能?promise,jquerydeferred实现不提供?谢谢
标签: jquery promise jquery-deferred polyfills es6-promise