等待当地储藏的同步化

时间:2013-07-10 14:01:17

标签: javascript jquery local-storage

localstorage与服务器之间存在同步问题。

国家/地区,城市,用户与服务器分开同步。(分离ajax呼叫)

问题是其他Javascript代码(Kncokout Bindings等)必须等待同步过程。或者更好的javascript函数必须等待另一个。

我该如何实施?

PS:我正在使用jquery,amplifyjs(用于localstorage交互),knockoutjs库。 PS2:我需要跨浏览器解决方案:)

修改 总结:

我有3个Javascript函数。所有这些都使用回调进行异步ajax调用。 这些函数可以并行工作。(不必等待彼此)

但代码必须在这3个函数之后工作。(因为这些函数正在同步本地存储,代码使用localstorage)

2 个答案:

答案 0 :(得分:3)

使用延迟对象和$.when,这是其中一个主要用途。

$.when($.ajax(...),$.ajax(...),$.ajax(...)).done(function(){
    // all three are done
});

答案 1 :(得分:1)

只要您同时启动ajax调用,这是实现此目的的一种方法。一个简单的计数轨道可以解决它 -

var countCalls;

然后在你的ajax相关代码中:

function initAjaxCalls() {

    countCalls = 0; //(re)set counter

    startAjax1(commonCallback); //pseudo call, use commomCallback as callback
    startAjax2(commonCallback);
    startAjax3(commonCallback);

}

在回调中,我们会跟踪通话次数:

function commonCallback(e) {

    countCalls++;

    /// when we have reached the max count, perform the sync. step
    if (countCalls === 3) performSyncStorage();
}

这将等到持续时间最长的操作完成。如果要将异步操作转换为同步操作,则必须执行此操作。