for循环中的功能。仅最后一个元素受影响

膨化米饼

这是我的chrome扩展程序的一部分,但是我不了解的部分来自javascript。

let elementsArray = [
    document.getElementById("main_keywords"),
    document.getElementById("search_side"), 
    document.getElementById("news_emotion"), 
    document.getElementById("news_comments")
];

for (elem of elementsArray) {
  var key = elem.getAttribute("id");

  chrome.storage.sync.set({ key: false }, function() {
      console.log(key + " saved : " + false);

      chrome.storage.sync.get({ key }, function (result) {
        console.log(key + " is " + result.key)
      });
  });
}

我的意图是,对于中的每个元素elementsArray,应{key:false}使用该元素的ID将其设置为chrome.storage api。其结果是,只有最后一个元素elementsArray,这是news_comments,被保存的4倍。控制台输出如下。

news_comments saved : false
news_comments saved : false
news_comments saved : false
news_comments saved : false
news_comments is false
news_comments is false
news_comments is false
news_comments is false

Chrome API是异步的,但我不确定对此概念是否有扎实的了解,尽管我不确定是否与此相关。

佐伊卜·伊亚兹(Zohaib Ijaz)

创建一个函数并使用参数调用它,该函数会将key变量保存在其范围内并记住该值。

当使用该变量的代码在循环内时,循环将结束,并且其回调get()仍处于挂起状态(异步回调)。因此,当执行这些回调时,该键变量必须已更新为最后一个值。

但是,当您将该代码移动到函数中并在循环内调用该函数时。在每次迭代中,将使用一个新值来调用该函数,并且该值将保留在该函数内部的代码中,即使已更新外部传递的变量的值,但由于函数的范围,传递给函数的值将保持不变。阅读有关JavaScript范围的更多信息。

const update = key => {
  chrome.storage.sync.set({ [key]: false }, function() {
      console.log(key + " saved : " + false);
      chrome.storage.sync.get({ key }, function (result) {
        console.log(key + " is " + result.key)
      });
  });
}
for (elem of elementsArray) {
  var key = elem.getAttribute("id");
  update(key);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过 for 循环向元素添加事件会导致所有元素仅影响循环中的最后一个元素

循环中的onclick仅引用循环中的最后一个元素

循环中的QtCore.QObject.connect仅影响最后一个实例

for循环中的lambda仅取最后一个值

对于仅影响数组最后一个元素的循环,我希望我的代码对数组的每个元素起作用

最后一个元素未在循环中删除

For循环仅迭代Python中的最后一个元素

jQuery每个内部每个仅影响最后一个元素

仅循环第一个和最后一个元素

React,为循环中的最后两个元素插入一个包装器

仅显示while循环中来自JavaScript的最后一个值

Javascript仅将for循环中的最后一个条目推送到对象

Parse.com将对象保存在循环中,仅保存最后一个对象

在循环中添加addEventListener()仅适用于最后一个按钮

如何仅修复Java ArrayList中重复的循环中的最后一个对象

在for循环中构造时仅返回数组的最后一个值

HttpSession 属性:getAttribute() 仅传递/获取循环中的最后一个值

对象的图表数据被覆盖,但仅与第一个交互的对象受影响

仅显示最后一个元素

Mysql的storded程序插入queary一个循环中仅将最后一个值

为什么我在每个循环中只添加最后一个元素?

如何在foreach循环中定义最后一个元素?

Scrapy item 只保存循环中的最后一个元素

在R循环中创建Plotly显示了所有元素的最后一个图表

检测“ for”循环中最后一个元素的pythonic方法是什么?

为什么Toast跳到该循环中的最后一个元素?

将类“ last”添加到while循环中数组的最后一个元素

不要在for循环中的最后一个元素之后写逗号

为每个循环中的最后一个元素去除逗号