我最近下载了一个使用ES6 Promises的库。由于我想部署到不支持Promises的浏览器,我还下载了polyfill。
因为我已经包含了jQuery,所以我想为Promise编写一个polyfill,它在内部使用jQuery' s Deferred。
我写了这个简单的polyfill,足以满足我的特定用例:
window.Promise = function(cb){
var promise = $.Deferred();
cb(promise.resolve, promise.reject);
return promise.promise();
};
这个问题是它没有涵盖整个规范(想象Promise.all()
缺少)。
在我投入大量时间之前,我想知道是否可以使用jQuery延迟为Promise编写完整的polyfill。或者是否有某些功能无法复制?
答案 0 :(得分:3)
using缺少
Promise.all()
之类的内容
$.when
可以或多或少地复制 Promise.all
。 Promise.race
可以通过创建延迟来复制,resolve
/ reject
方法附加到所有输入承诺。
这个问题是它没有涵盖整个规范
没有。可以轻松添加未覆盖的部件。真正的问题是jQuery Deferred
的现有部分实施不符合规范 - 请参阅Problems inherent to jQuery $.Deferred (jQuery 1.x/2.x)
在我投入大量时间之前,我想知道是否可以使用jQuery的Deferred为Promise编写完整的polyfill。或者是否有一些无法复制的功能?
所有内容都可以复制,但是你需要在Deferred
实现中进行足够的monkeypatch,你最好只使用一个现有的polyfill。如果您真的想创建自己的,可以将其基于jQuery.Callbacks("once memory")
。