基于jQuery Deferred的ES6 Promise polyfill

时间:2014-08-31 14:03:47

标签: jquery promise jquery-deferred polyfills es6-promise

我最近下载了一个使用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。或者是否有某些功能无法复制?

1 个答案:

答案 0 :(得分:3)

  

缺少Promise.all()之类的内容

using $.when可以或多或少地复制

Promise.allPromise.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")