簡體   English   中英

將LocalForage與jQuery的Promise庫一起使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM