Javascript 无法将json保存回chrome扩展中

Javascript 无法将json保存回chrome扩展中,javascript,json,google-chrome-extension,Javascript,Json,Google Chrome Extension,我正在尝试为Twitch创建一个chrome扩展,我面临一个小问题,我不知道如何解决。我必须说我的javascript知识不是最好的(我是一名C#开发人员),这次连谷歌都帮不了我(可能是因为我不知道正确的搜索词) 因此,我们必须解决这个问题。此扩展的目标是在直播期间当拖缆更改游戏时通知您。我想只通知用户一次,每个游戏的变化。我有一个包含对象的数组,这个对象是一个带有一些属性的类,其中一个属性是游戏。然后将该数组解析为json字符串,保存在浏览器localstorage中。下面是我用来检查拖缆正在

我正在尝试为Twitch创建一个chrome扩展,我面临一个小问题,我不知道如何解决。我必须说我的javascript知识不是最好的(我是一名C#开发人员),这次连谷歌都帮不了我(可能是因为我不知道正确的搜索词)

因此,我们必须解决这个问题。此扩展的目标是在直播期间当拖缆更改游戏时通知您。我想只通知用户一次,每个游戏的变化。我有一个包含对象的数组,这个对象是一个带有一些属性的
,其中一个属性是
游戏
。然后将该数组解析为json字符串,保存在浏览器
localstorage
中。下面是我用来检查拖缆正在玩什么游戏并试图将属性
game
设置为该值的代码。然后将数组解析回json字符串,并设置
localstorage

function checkPlaying() {
    var twitchUsers = JSON.parse(localStorage.twitchUsers);

    if (twitchUsers.length > 0) {
        var f = (function () {

            var xhr = [];
            for (i = 0; i < twitchUsers.length; i++) {
                (function (i) {

                    if (twitchUsers[i].isOnline) {
                        xhr[i] = new XMLHttpRequest();
                        xhr[i].open('GET', REQUEST_BASE + REQUEST_CHANNELS + twitchUsers[i].id, true);
                        xhr[i].setRequestHeader('Accept', 'application/vnd.twitchtv.v5+json')
                        xhr[i].setRequestHeader('Client-ID', CLIENT_ID)

                        xhr[i].onreadystatechange = function () {
                            if (xhr[i].readyState == 4 && xhr[i].status == 200) {
                                var response = JSON.parse(xhr[i].responseText);
                                var currentGame = response.game;

                                if (twitchUsers[i].game != currentGame) {
                                    twitchUsers[i].game = currentGame;

                                    if (twitchUsers[i].notify) {
                                        browser.notifications.create({
                                            "type": "basic",
                                            "iconUrl": twitchUsers[i].logo,
                                            "title": "TwitchWatcher",
                                            "message": twitchUsers[i].name + ' is currently playing ' + twitchUsers[i].game
                                          });
                                    }
                                }
                            }
                        };
                        xhr[i].send();
                    }

                    localStorage.twitchUsers = JSON.stringify(twitchUsers);
                })(i);
            }
        })();
    }
}
函数校验(){
var twitchUsers=JSON.parse(localStorage.twitchUsers);
如果(twitchUsers.length>0){
var f=(函数(){
var xhr=[];
对于(i=0;i
问题是,
localStorage.twitchUsers
从未获得新值,这导致扩展不断用相同的游戏通知用户

我试图更改
localStorage.twitchUsers=JSON.stringify(twitchUsers)的位置
for循环的内部
f
变量的外部,但我没有成功

有人知道我做错了什么吗


谢谢。

使用
localStorage.setItem(“twitchUsers”,JSON.stringify(twitchUsers))
twitchUsers=JSON.parse(localStorage.getItem(“twitchUsers”)-显然要做一些错误检查,但这应该会有帮助->@Archer谢谢,它对Chrome做了一些检查,但对Firefox没有。我想有一种不同的方式来保存使用firefox?!您不用等待异步XHR完成就可以保存到存储中。@wOxxOm我也这么认为,在C#中,要等待异步方法,我会使用async关键字,但如何在Javascript中执行?简而言之,您可以找到许多示例:承诺。