我使用 LocalForage 在浏览器中进行持久存储。我也(不幸地)在项目的其他任何地方都使用了 jQuery 的延迟和承诺。我正在尝试用来$.when
收集来自许多 LocalForage 请求的响应:
var results = _.map(keys, localForage.getItem);
$.when.apply($, results).then(function() {
// iterate over the arguments object
});
这……不行。我已验证该results
数组正确包含许多 ES6 承诺对象(或在某些浏览器中来自 LocalForage 的内置 shim 的 shim 承诺)。这些对象上没有.promise
函数,因此$.when
不会将它们识别为 Promise,并then
立即使用所有 Promise 作为参数调用匿名函数。作为测试,我尝试将上面的代码更改为
var results = _.map(keys, _.constant($.Deferred().resolve(false)));
$.when.apply($, results).then(function() {
// iterate over the arguments object
});
它工作正常。
什么是最好的解决方案?有没有办法将 ES6/shim 承诺转换为 jQuery 承诺,除了var deferred = $.Deferred(); es6Promise.then(deferred.resolve, deferred.reject)
?