chrome.storage.sync.set无效

时间:2014-01-28 05:46:14

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

我正在创建一个Chrome扩展程序,用于在您点击时收集地理位置 - 同步数据以便存储过去的20个经度 - 纬度坐标。但是chrome.storage.sync.set似乎无法正常工作!

    var locations = [];
//get past locations and put them into 'locations' array
    chrome.storage.sync.get("locations", function(data){
        console.log("Getting Locations");
        var index;
        for (index = 0; index < data.length; ++index) {
            locations.unshift(data);
        }
    });
//add current location to 'locations' array
    navigator.geolocation.getCurrentPosition(function(position) 
    {
        initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
    });
    locations.unshift(initialLocation);

//sync locations to cloud
    var obj = {};
    obj["locations"] = locations;
    chrome.storage.sync.set(obj, function() {
        console.log("Location Saved");
        console.log(locations);
    });

因此每次运行此代码时都应如此 (a)获取过去的位置(b)添加当前位置和(c)将其存储回云中。但每次我运行程序时,'locations'数组都会保持大小[1],也就是没有任何东西得到/设置!我已经看过其他一些关于这个论点的正确性的帖子,但我已经检查了我的,我相信它们是合理的。

发生了什么事???任何人都可以阐明如何使这个代码工作?非常感谢我的代码英雄:D

1 个答案:

答案 0 :(得分:0)

chrome.storage.sync.get是异步的,因为你可以看到here

因此,当您尝试将结果保存在locations变量中时,方法的执行尚未完成。

chrome.storage.sync.get('locations', function(data){
    console.log("Getting Locations");
    console.log(data.locations); // The locations object.
    });

请参阅this post