从chrome.storage.sync.get获取更多价值

时间:2017-11-24 00:50:41

标签: javascript google-chrome-extension local-storage

我想发送ajaxrequest,但首先我必须从chrome.storage.sync获得3个值。这是一个异步函数,因此我无法将其推送到变量并发送请求。

我想做这样的事情(我知道这是异步的,所以我无法得到变量)

var a;
var b;
var c;

chrome.storage.sync.get("a", function(callback){
    a = callback.a;
});
chrome.storage.sync.get("b", function(callback){
    b = callback.b;
});
chrome.storage.sync.get("c", function(callback){
    c = callback.c;
});

function sendwithajax (url) {
        var info = {
            aa: a,
            bb: b,
            cc: c
        }

        return $.ajax({
            method: "GET",
            url: url,
            data: {data:info}
        })
}

2 个答案:

答案 0 :(得分:1)

如果仔细观察StorageArea docs,您会发现第一个参数可能是:

  

字符串或字符串或对象数组

     

要获取的单个键,要获取的键列表或指定默认值的字典(请参阅对象的说明)。空列表或对象将返回空结果对象。传入null以获取存储的全部内容。

这意味着您可以传递所需的字符串键数组:

chrome.storage.sync.get(["a", "b", "c"], function(items){
    a = items.a;
    b = items.b;
    c = items.c;
});

要获取所有存储的值,只需传递null即可。

答案 1 :(得分:1)

首先,正如@Deliaz指出的那样,你可以一次性获得所有3个参数。如果这些项目尚不存在,您还应该将其与设置默认值的能力结合起来。

此外,在代码中的某处,您需要提供等待直到返回存储的值,因为对storage.get的调用是异步的。实际上,上面的代码将在检索到a,b或c之前完成并继续下一行。如果你期望下一行是

sendwithajax("some url");

它不会起作用,因为a,b和c还不可用。

通常,您应该如何构建代码:

function sendDataWithAjax(url) {
    chrome.storage.sync.get({"a": "", "b": "", "c": ""}, function (result) {
        var info = {
            aa: result.a,
            bb: result.b,
            cc: result.c
        };
        sendwithajax(url, info, process);
    });
}

function sendwithajax(url, info, callback) {

    $.ajax({
        method: "GET",
        url: url,
        data: {data: info},
        success: callback
    });
}

function process(serverResult) {

}

请注意,您无法通过您的方法获得ajax调用的结果:

return $.ajax()

会返回有关ajax对象的内容,而不是结果。结果也会以异步方式返回,因此在我的代码中,只有在中>从存储中检索到数据后,才会调用 > ajax调用已完成。