Javascript 在进行ajax调用时迭代本地存储

Javascript 在进行ajax调用时迭代本地存储,javascript,local-storage,Javascript,Local Storage,如果我在localstorage中有几个项目需要迭代并执行一些操作,我知道这段代码将无法跳过备用项目 for (var i = 0, len = localStorage.length; i < len; i++) { var key = localStorage.key(i); localStorage.removeItem(key); } for(var i=0,len=localStorage.length;i以下问题: localStorage.clear

如果我在localstorage中有几个项目需要迭代并执行一些操作,我知道这段代码将无法跳过备用项目

for (var i = 0, len = localStorage.length; i < len; i++)
{
    var key = localStorage.key(i);
    localStorage.removeItem(key);
}
for(var i=0,len=localStorage.length;i
现在,请记住js是单线程的;如果我有

for (var i = 0, len = localStorage.length; i < len; i++)
{
    var key = localStorage.key(i);
    ajaxHttpAndSuccessCallback(function f(){localStorage.removeItem(key)});
}
for(var i=0,len=localStorage.length;i

其中,ajaxHttpAndSuccessCallback进行一些ajax调用,并在成功的情况下调用参数函数。这保证有效/无效吗?依赖浏览器

尝试在IIFE内调用
ajax
,并将
i
作为变量传递给

for (var i = 0, len = localStorage.length; i < len; i++) {
  (function(index) {
    var key = localStorage.key(index);
    ajaxHttpAndSuccessCallback(function f(){localStorage.removeItem(key)});
  }(i));
}
for(var i=0,len=localStorage.length;i
尝试在iLife中调用
ajax
,并将
i
作为变量传递给

for (var i = 0, len = localStorage.length; i < len; i++) {
  (function(index) {
    var key = localStorage.key(index);
    ajaxHttpAndSuccessCallback(function f(){localStorage.removeItem(key)});
  }(i));
}
for(var i=0,len=localStorage.length;i

  • 我问:“您真的想以这种方式从
    localStorage
    对象中删除所有项目吗?”
  • 你回答:“不……但我还是想知道如果我这样做会发生什么”
localStorage
是一种类似对象的存储。如果您将其视为一个数组,您将无法按照您在问题中提出的方式删除其所有项。
数组的
length
属性是一个“live”属性。
请考虑下面的例子,使用< <代码> > <代码>循环>以下问题:

    localStorage.clear();
    localStorage.setItem(0, 'red');
    localStorage.setItem(1, 'Helvetica');
    localStorage.setItem(2, 'myCat.png');

    console.log(localStorage);  // Storage {0: "red", 1: "Helvetica", 2: "myCat.png", length: 3}

    for (var i = 0, len = localStorage.length;  i < len; i++)
    {
        var key = localStorage.key(i);
        localStorage.removeItem(key);        
    }

    console.log(localStorage);  // Storage {1: "Helvetica", length: 1}

  • 我问:“您真的想以这种方式从
    localStorage
    对象中删除所有项目吗?”
  • 你回答:“不……但我还是想知道如果我这样做会发生什么”
localStorage
是一种类似对象的存储。如果您将其视为一个数组,您将无法按照您在问题中提出的方式删除其所有项。
数组的
length
属性是一个“live”属性。
请考虑下面的例子,使用< <代码> > <代码>循环>以下问题:

    localStorage.clear();
    localStorage.setItem(0, 'red');
    localStorage.setItem(1, 'Helvetica');
    localStorage.setItem(2, 'myCat.png');

    console.log(localStorage);  // Storage {0: "red", 1: "Helvetica", 2: "myCat.png", length: 3}

    for (var i = 0, len = localStorage.length;  i < len; i++)
    {
        var key = localStorage.key(i);
        localStorage.removeItem(key);        
    }

    console.log(localStorage);  // Storage {1: "Helvetica", length: 1}


您是否尝试过在ajax调用的
success
中从
localStorage
中删除项的
循环?结果是什么?您真的想以这种方式从
localStorage
对象中删除所有项吗?@RomanPerekhrest no。。但我仍然想知道,如果我确实尝试了
for
循环,在ajax调用的
success
中从
localStorage
中删除项,会发生什么情况?结果是什么?您真的想以这种方式从
localStorage
对象中删除所有项吗?@RomanPerekhrest no。。但我还是想知道如果我只是
forEach
,会发生什么。我猜@RayonDabre“或只是
forEach
”不确定将在哪里使用
.forEach()
?将
localStorage.forEach(function(){…})
失败吗?如果我遗漏了什么,请更正。@RayonDabre
.forEach()
是数组的一种方法。prototype
。您是否尝试过
localStorage.forEach(function(){})
?我正在将
localStorage
读作存储在
localStorage
中的变量存储数组。。知道了!或者只是
forEach
。我猜@RayonDabre“或只是
forEach
”不确定将在哪里使用
.forEach()
?将
localStorage.forEach(function(){…})
失败吗?如果我遗漏了什么,请更正。@RayonDabre
.forEach()
是数组的一种方法。prototype
。您是否尝试过
localStorage.forEach(function(){})
?我正在将
localStorage
读作存储在
localStorage
中的变量存储数组。。知道了!所以我问题的第一部分已经说过,如果项目在for循环中被删除,那么它将跳过项目。。这是毫无疑问的。我想知道如果我将项目移除作为从循环触发的ajax请求回调的一部分,会发生什么。。。在JSF的事件驱动单线程模型的上下文中,虽然知道这一点很好,但它仍然不能回答我的问题。您给出的代码更好,但问题是我在问题文本中的代码会发生什么情况。。所以+1,但还没有被接受:)@saugata,这很简单-你问题中的代码大部分会给你不可预知的(意外的)结果,因为你在同步循环中调用异步请求。这个循环可以很容易地结束,其速度远远快于您获得和处理来自ajax请求的所有响应的速度。你对“这样”的代码没有保证所以。。我问题的第一部分已经说过,如果项目在for循环中被删除,那么它将跳过项目。。这是毫无疑问的。我想知道如果我将项目移除作为从循环触发的ajax请求回调的一部分,会发生什么。。。在JSF的事件驱动单线程模型的上下文中,虽然知道这一点很好,但它仍然不能回答我的问题。您给出的代码更好,但问题是我在问题文本中的代码会发生什么情况。。所以+1,但还没有被接受:)@saugata,这很简单-你问题中的代码大部分会给你不可预知的(意外的)结果,因为你在同步循环中调用异步请求。这个循环可以很容易地结束,其速度远远快于您获得和处理来自ajax请求的所有响应的速度。您不能保证使用“此类”代码