1

このようなご質問がとても多いのですが、なかなか思い通りのものが作れませんでした。私のコードは次のようになります。一部は chrome.storage に格納されており、関数でそれらの 1 つを返し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??

4

1 に答える 1

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
});
于 2013-05-23T17:59:59.087 に答える