影响回调函数中的变量



这种问题很常见,但我总是做不到我想要的。我的代码是这样的。一些pubKeyProfiles储存在铬中。,我希望我的函数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);
}

阅读后如何从异步回调函数返回值?,我尝试了以下代码:

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 ??

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

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
});

最新更新