这类问题非常频繁,但我无法做出我想要的。
我的代码看起来像这样。
一些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
??
答案 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
});