質問 - 変数をグローバル スコープに渡す方法は? :
var global_variable;
chrome.storage.local.get('ABC',function(result){
global_variable = result; //pass result to global var.
});
console.log(global_variable); //outputs undefined, why!!!?
質問 - 変数をグローバル スコープに渡す方法は? :
var global_variable;
chrome.storage.local.get('ABC',function(result){
global_variable = result; //pass result to global var.
});
console.log(global_variable); //outputs undefined, why!!!?
グローバル変数を設定するconsole.log()
前に起動されるからです。非同期で起動される
ためです。'ABC',function(result){
chrome.storage.local.get
それを確認するには、次のコードをテストします。
var global_variable;
chrome.storage.local.get('ABC',function(result){
global_variable = result; //pass result to global var.
test();
});
function test() {
console.log(global_variable);
}
非同期関数のコールバック内で変数を設定しています。コールバックは、get アクションが完了した後に実行されます。
コードは次の順序で実行されます。
chrome.storage.local.get("ABC",callback);
それから
console.log();
それから
callback()
コールバックに console.log ステートメントを配置し、現在のステートメントの後に実行されることを確認することで、これを確認できます。
Javascript 関数は、非同期コールバック呼び出しを実行する前に完了するまで実行されます。
このように書いた方が理にかなっているかもしれませんが、これはあなたが今持っているものと同等です。
//define the callback
function callbackFunction(result){
global_variable = result; //pass result to global var.
}
//run the get. When it is complete the callback will be added to a queue
//to run next after current operations have completed
chrome.storage.local.get('ABC',callback);
// this will run immediately after the get call
console.log(global_variable);
変数を操作する場合は、ロジックをコールバック (またはコールバックによって呼び出される別の関数) に配置する必要があります。