[英]How to get the localforage value without using promise in ionic1
[英]Using LocalForage with jQuery's promise library
我使用LocalForage在瀏覽器中進行持久存儲。 我也(不幸地)在項目中的其他任何地方都使用了jQuery的遞延和承諾。 我正在嘗試使用$.when
來收集來自許多LocalForage請求的響應:
var results = _.map(keys, localForage.getItem);
$.when.apply($, results).then(function() {
// iterate over the arguments object
});
這...行不通。 我已驗證results
數組正確包含許多ES6 Promise對象(或某些瀏覽器中LocalForage內置的shim中的Shim Promise)。 這些對象上沒有.promise
函數,因此$.when
.promise
在無法將它們識別為承諾的情況下,立即調用匿名函數, then
將所有promise作為參數。 作為測試,我嘗試將上面的代碼更改為
var results = _.map(keys, _.constant($.Deferred().resolve(false)));
$.when.apply($, results).then(function() {
// iterate over the arguments object
});
它可以正常工作。
最好的解決方案是什么? 除了var deferred = $.Deferred(); es6Promise.then(deferred.resolve, deferred.reject)
之外,還有一種方法可以將ES6 / shim承諾轉換為jQuery承諾var deferred = $.Deferred(); es6Promise.then(deferred.resolve, deferred.reject)
var deferred = $.Deferred(); es6Promise.then(deferred.resolve, deferred.reject)
嗎?
最好的解決方案是什么?
不要這樣 不要使用$.when.apply
。 不要將ES6承諾轉換為jQuery遞延。
ES6 Promise在許多方面都比jQuery遞歸好-最重要的是,它們遵循Promises / A +且可互操作,從而使同化成為非問題。 您可以在jQuery中輕松使用它們。 就您而言,應該是
var results = _.map(keys, localForage.getItem);
Promise.all(results).then(function(arr) {
// iterate over arr - no more arguments object!
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.