Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery';s承诺图书馆_Javascript_Jquery_Promise_Localforage - Fatal编程技术网

Javascript 在jQuery';s承诺图书馆

Javascript 在jQuery';s承诺图书馆,javascript,jquery,promise,localforage,Javascript,Jquery,Promise,Localforage,我在浏览器中使用localfough进行持久存储。我还(不幸地)在项目的其他地方使用jQuery的延迟和承诺。我正在尝试使用$。当从许多本地请求收集响应时: var results = _.map(keys, localForage.getItem); $.when.apply($, results).then(function() { // iterate over the arguments object }); 这个。。。不起作用。我已经验证了results数组正确地包含了许多ES6

我在浏览器中使用localfough进行持久存储。我还(不幸地)在项目的其他地方使用jQuery的延迟和承诺。我正在尝试使用
$。当
从许多本地请求收集响应时:

var results = _.map(keys, localForage.getItem);
$.when.apply($, results).then(function() {
  // iterate over the arguments object
});
这个。。。不起作用。我已经验证了
results
数组正确地包含了许多ES6 promise对象(或者在某些浏览器中,来自LocalFower内置的shim的shim promises)。这些对象上没有
.promise
函数,因此
$。当
不将它们识别为承诺时,立即调用匿名
函数,并将所有承诺作为参数。作为测试,我尝试将上述代码更改为

var results = _.map(keys, _.constant($.Deferred().resolve(false)));
$.when.apply($, results).then(function() {
  // iterate over the arguments object
});
它工作正常

解决这个问题的最佳方案是什么?除了
var deferred=$.deferred()之外,是否有其他方法可以将ES6/shim承诺转换为jQuery承诺;es6Promise.then(deferred.resolve、deferred.reject)

解决这个问题的最佳方案是什么

不要这样做。不要使用
$.when.apply
。不要将ES6承诺转换为jQuery延迟

ES6承诺在很多方面都比jQuery延迟要好——最重要的是,它们遵循承诺/A+,并且是可互操作的,这使得同化不再成为问题。对你来说,应该是这样

var results = _.map(keys, localForage.getItem);
Promise.all(results).then(function(arr) {
  // iterate over arr - no more arguments object!
});

不是真的,但没有理由这么做。相反地,让他们改变主意!请看,由于我的requirejs配置,我不认为LocalFow全局应用了shim,项目需要支持本地不支持ES6承诺的浏览器。我也不想在项目中添加其他库。对我来说,读起来好像它确实依赖于一个全球可用的ES6 promise实现,并为此包括一个polyfill。只要尝试一下它是否可用-并修复您的requirejs配置Otherwisewell,这对我来说不是什么问题-谢谢,您完全正确。我会给出一个答案:-)