影响回调函数中的变量

时间:2013-05-23 17:44:53

标签: javascript asynchronous callback google-chrome-storage

这类问题非常频繁,但我无法做出我想要的。 我的代码看起来像这样。 一些pubKeyProfiles存储在chrome.storage中,我希望我的函数getProfile返回其中一个。

getProfile(keyPairId){

    var profile = null;

    chrome.storage.local.get({ pubKeyProfiles : [] }, function (result) {
        var pubKeyProfiles = result.pubKeyProfiles;
        for (var i = 0; i < pubKeyProfiles.length; ++i) {
            if(pubKeyProfiles[i].pubKey.keyId === keyPairId){
                profile = pubKeyProfiles[i];
            }
        }
    });

    console.log(profile);
}

阅读How to return value from an asynchronous callback function?后,我尝试了以下代码:

getProfile(keyPairId){

    var profile = null;

    function foo(fn){
        chrome.storage.local.get({ pubKeyProfiles : [] }, function (result) {
            var pubKeyProfiles = result.pubKeyProfiles;
            for (var i = 0; i < pubKeyProfiles.length; ++i) {
                if(pubKeyProfiles[i].pubKey.keyId === keyPairId){
                    profile = pubKeyProfiles[i];
                    fn(profile);
                }
            }
        });
    }

    foo(function(profile){
        return profile;
    });

    console.log(profile);
}

但是,当我处理异步函数时,无论我尝试什么,配置文件仍然是null

我的问题是:如何使函数getProfile返回profile ??

1 个答案:

答案 0 :(得分:3)

将回调传递给您的函数是一个更好的主意。

var getProfile = function (keyPairId, callback) {
    chrome.storage.local.get({ pubKeyProfiles : [] }, function (result) {
        var pubKeyProfiles = result.pubKeyProfiles, profile;
        profile = pubKeyProfiles.filter(function (pubKeyProfile) {
            return pubKeyProfile.pubKey.keyId === keyPairId
        })[0];

        callback(profile);
    });
};

getProfile(keyPairId, function (profile) {
    //do something with profile here
});
相关问题