【问题标题】:unable to pull data from browser.storage.local.get无法从 browser.storage.local.get 中提取数据
【发布时间】:2019-08-27 18:09:58
【问题描述】:

尝试为 64.0 版 Firefox 插件/扩展实现选项页面。我正在使用browser.storage.local.set 来存储数据。但是当我使用browser.storage.local.get 提取数据时,控制台日志上的结果是<unavailable>

以下是我在options.js 文件中运行的函数(我在表单字段gateway 上输入njnj 并点击提交按钮)

function saveOptions(e) {
  e.preventDefault();
  console.log("you are here")
  console.log(document.querySelector("#gateway").value)
  browser.storage.local.set({
  "gateway": document.querySelector("#gateway").value  });
  console.log(browser.storage.local.get("gateway"))
}

document.querySelector("form").addEventListener("submit", saveOptions);

我在控制台日志中的实际输出如下:

you are here                                         options.js:4:3
njnj                                                options.js:5:3
<unavailable>                                       options.js:8:3

【问题讨论】:

  • 我的预期输出应该是让 'njnj' 作为“网关”的值返回,因为这是我刚刚设置的值。

标签: firefox firefox-addon local-storage


【解决方案1】:

好的,所以我确实部分弄清楚了上述代码不起作用的原因。问题是 browser.storage.local.get() 在 javascript 中返回一个“承诺”(我实际上还不知道这意味着什么)。所以你必须有一个代码,可以从这个“承诺”中实际检索答案/保存的值。我会给你一个如何检索值的例子:

// first save a key value pair into storage
browser.storage.local.set({"key": 'value'})

// to retrieve this value, first declare a new variable
var savedvalue = "zero"

// retrieve the 'promise' of key value pair, then run the associated function to get
//the savedvalue and set it equal to previously declared variable. 
browser.storage.local.get(['key'], function(result) {savedvalue = result.key});

// now, when you call savedvalue (even outside the function above), it will return 'value'
console.log(savedvalue)

output>> value

【讨论】:

  • 由匿名用户编辑:function(result) {savedvalue = result.key}); result.value 或其他东西
【解决方案2】:

你可以像这样使用异步函数并等待

async function saveOptions(e) {

  e.preventDefault();      
  await browser.storage.local.set(
    { "gateway": document.querySelector("#gateway").value }
  );
}

document.querySelector("form").addEventListener("submit", async saveOptions);

您无需将“e”传递给函数,您无需对它做任何事情。 如果心情好的话,你也可以这样重构它

document.querySelector("form").addEventListener( "submit", async ()=> {
    e.preventDefault();      
    await browser.storage.local.set(
      { "gateway": document.querySelector("#gateway").value }
    );
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2021-05-12
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多