临时返回功能

时间:2014-03-28 23:40:36

标签: javascript function

我想从localStorage获取我的数据,因为它更快,更可靠离线,然后从网上获取数据,让我们说ajax调用。

function getdata(){
    function loadViaAjax(){
        localStorage.data=newerData;
        return newerData;
    }
    if(localStorage.data){
        return localStorage.data;
    }
}
toBeInseretIntoDOM=getData();    //AngularJS will do this part

目标是首先获得localStorage.data,因为用户可以缓慢连接,旧信息仍然优于无,并同时执行ajax request以获取最新数据。
从逻辑上讲,localStorage的数据会更快,因此它们应该被返回以进行处理并插入到DOM中,但是一旦ajax赶上,数据就会更新。

3 个答案:

答案 0 :(得分:2)

function setdata(data){
 //do whatever you need to with your data here
 }

function getdata(){
   $.get(data_url,function(response){
         setdata(response);
    });

   if(localStorage.data){ 
        setdata(localStorage.data);
   }

}

当调用getdata时,将立即发送ajax请求。无需等待回复,数据将通过setdata从本地存储(如果存在)设置。当ajax请求收到响应setdata时再次调用,但这次是服务器数据。

答案 1 :(得分:1)

如果你的某个功能有时会异步,有时也不会(或者,在你的情况下,总是两者都有),那么我发现最好的办法就是像对待它一样对待#&# 39; s总是异步的。换句话说,传递一个回调并始终根据那里的结果:

function getdata(callback) {
    $.get(data_url, function(response) {
        callback(response);
    });
    callback(localStorage.data);
}

像这样使用:

getdata(function(data) {
    // do something
});

请注意,回调不必关心是否同步检索数据。它可以根据收到的数据采取行动。

类似的模式是,如果你有数据,则返回数据,如果你没有,那就去获取数据:

function getdata(callback) {
    if (localStorage.data) {
        callback(localStorage.data);
    } else {
        $.get(data_url, function(response) {
            callback(response);
        });
    }
}

答案 2 :(得分:0)

我听起来像是在说......

我想保留localStorage中可用数据的最后一个副本,但有一段时间我想知道我是否可以通过Ajax刷新数据。

如果是这种情况,那么你可以这样......

// This is not complete code ...
function loadData(callback) {
  getFromCache() {
    var data = window.localStorage.getItem("mystuff");
    if (data) {
      callback(JSON.parse(data));
    }
  }


  handleSuccess(data) {
    window.localStorage.setItem("mystuff", JSON.stringify(data));
    callback(data);
  }

  var ajaxConfig = {
    url: "http://example.com",
    error: getFromCache,
    success: handleSuccess
  }
  // Trigger ajax call here...
  // You can even use a window.setTimeout() here
  // to see if the ajax event takes too long -- if so
  // cancel it and call getFromCache
}