を返します。この関数は応答をフェッチしてのlocalStorageライティングのAJAX呼び出しを行う方法が約束
function getSomething() {
var d = $.Deferred();
var payload = ...
$.post(API, payload).done(function (data) {
// addData is a wrapper for localStorage write
addData(payload);
d.resolve();
}).fail(d.reject);
return $.when(d).done(function() {
console.log('API fetch OK');
}).promise();
}
への応答を書き込みのlocalStorageに応じそしてdocument.ready、次の実行に
getSomething().done(function() {
// getData is a wrapper for localStorage read
var fs = $.grep(getData(), function (i) {
return i.cid == getID();
});
var fso = JSON.parse(fs[0].data);
$('.button-list').each(function (i, v) {
var buttonRow = '';
for (i = 0 ; i < fso.length ; i++) {
buttonRow += '<a id=' + getID() + '-' + fso[i].Content.Id + ' class=\'btn btn-default\'>' + fso[i].Form.Name + '</a>';
}
$(v).html(buttonRow);
});
ここでの問題は、getSomething()を呼び出す前に何かが既にlocalStorageに存在するかどうかをチェックする2つの関数の間に別の関数を追加したいということです。これは、localStorageに書き込まれる前にgetSomethingが '完了'されているために失敗します。私はlocalStorageがgetSomethingが完了した後200msを読むことができることを発見した。
私の質問 - はgetSomethingが「完了」状態に入る前のlocalStorageが書き込まれている保証することは可能ですか?
ありがとうございました!ここで
第1の質問なぜlocalStorageが必要なのですか。第2の質問なぜあなたは約束を必要としますか? – madalinivascu
だから、(a)localStorageは、AJAX呼び出しから得られたデータを再利用するJSが多く、約束なしに要素を描画できないためです。 HTTP要求がまだ完了していないため、getData()が空であるため、** fs **を定義する行は失敗します。 –
は、私は希望あなたのAJAX呼び出し – madalinivascu