Javascript 临时职能返回

Javascript 临时职能返回,javascript,function,Javascript,Function,我希望从localStorage获取数据,因为它在脱机时更快、更可用,然后从web获取数据,比如ajax调用 function getdata(){ function loadViaAjax(){ localStorage.data=newerData; return newerData; } if(localStorage.data){ return localStorage.data; } } toBeInser

我希望从localStorage获取数据,因为它在脱机时更快、更可用,然后从web获取数据,比如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请求
以获取最新数据。
从逻辑上讲,localStorage的数据将更快,因此它们应该返回进行处理并插入DOM,但是一旦ajax赶上,数据应该得到更新

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,但这次调用的是服务器数据。

我想在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
}

如果你有一个函数,有时是异步的,有时不是(或者,在你的例子中,总是两者都是),那么我发现最好的办法就是把它当作总是异步的。换句话说,将回调传递给它,并始终对那里的结果执行操作:

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);
        });
    }
}

这个用例是什么?我的意思是,如果需要从服务器获取数据,那么从localStorage显示的信息要么不完整,要么不准确。如果它是不完整的,那么只有在用户要求的情况下才能获取它。如果它不准确,那么从本地存储获取它就没有意义。在任何情况下,如果您想延迟服务器请求,您可以始终使用javascript的
设置超时
想象它在您的手机上,并且手机具有互联网连接,我想至少获取最后一次会话数据,如果用户恢复了互联网连接,他应该得到最新的信息,这和你在文章中提到的几秒钟后从服务器上获取信息有很大的区别。如果是这种情况,那么你应该询问如何检查移动设备上的互联网连接(如果有的话)。老实说,我甚至不知道问题是什么。好多了。非常感谢,如果没有设置localStorage.data(这不是您所要求的),我们将只从服务器获取数据。P.S有点想改变被接受的答案:(@Mike-我的第二个例子是这样的,我只是为了比较而把它包括进来