gpt4 book ai didi

javascript - 回调返回 undefined 与 chrome.storage.local.get

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:10:40 31 4
gpt4 key购买 nike

我的代码一直有同样的问题,我一直在努力解决这个问题。我的程序中有保存和读取功能。以下代码是我的代码的缩减版本。

函数.js

// Reads data from ChromeStorage
function read(key) {
if(key != null) {
chrome.storage.local.get(key, function (obj) {
return obj;
});
}
}

// Saves data to ChromeStoarge
function save(key, obj) {
var jsonfile = {};
jsonfile[key] = obj;

chrome.storage.local.set(jsonfile, function () {
console.log('Saved');
});
}

popup.html

<!DOCTYPE html>        
<html>
<head>
<title>Habit Breaker</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>

<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="js/functions.js"></script>
<script type="text/javascript" src="js/popup.js"></script>

</body>
</html>

弹窗.js

save("Test", "Hello");

read("Test");

list .json

{
"manifest_version": 2,

"name": "Problem",
"description": "This extension has a huge problem",
"version": "1.0",

"permissions": [
"storage"
],

"browser_action": {
"default_popup": "popup.html"
}

}

当我调用保存函数时,一切都按预期运行,数据已成功存储。但是当我调用读取函数时,它返回一个未定义的。

奇怪的是,我没有在保存函数中返回 obj,而是使用 console.log() 它返回了我的预期值。

我的想法开始用尽,而且我做了很多小时的研究。如果有人有线索,我们将不胜感激。

最佳答案

正如 Iván 所说,chrome.storage API 是异步的,您可以通过几种方式处理它:

1.回调函数

function read(key, callback) {
if(key != null) {
chrome.storage.local.get(key, function (obj) {
callback(obj);
});
}
}

// Usage
read("test", function(val) {
// val...
})

2. promise

function read(key) {
return new Promise((resolve, reject) => {
if (key != null) {
chrome.storage.local.get(key, function (obj) {
resolve(obj);
});
} else {
reject(null);
}
});
}

// 1. Classic usage
read('test')
.then(function (val) {
// val...
})
.catch(function () {
// looks like key is null
});

// 2. Use async/await
var val = await read(test);
console.log(val);

关于javascript - 回调返回 undefined 与 chrome.storage.local.get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861028/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com