2017-06-29 25 views
-1

親関数レベルの変数にネストされた自己呼び出し関数を介して値を代入しようとしています。私はJavaScriptのコーディングには新しく、ネストされた関数から変数の値を取得する際にいくつかの問題を抱えています。値は非同期にロードされていますか?それとももう一つの修正がありますか?自己呼び出し関数のJavascriptアクセス変数

function searchA(keyword_string) { 

       var video_id = ''; 
       var q = keyword_string; 
       var request = gapi.client.youtube.search.list({ 
         q: q, 
         part: 'snippet', 
         maxResults: '1', 
         type: 'video', 
         order: 'relevance', 
         videoEmbeddable: 'true' 
       }); 
       request.execute(function(response) { 
         var str = JSON.stringify(response.result); 
         var json = response.result; 
         video_id = json.items[0].id.videoId; 
         console.log(video_id); //THIS GIVES THE CORRECT ID 
       }); 
       console.log(video_id); //THIS RETURNS AN EMPTY STRING 
     } 
+0

不正な 'video_id'を返す行は、正しい行を返す行の前に実行されています。コードを少し調べれば、すぐにその理由を知ることができます。 – treecoder

+0

空の文字列にvideo_idを割り当てる最初の行は?はい、私の値をjson.items [0] .id.videoIdに再割り当てしていませんか?その変数のスコープは、その関数のローカルなままです。親関数 "searchA()"全体にグローバルにする方法 –

+0

スコープはここでは問題ではなく、実行の順序です。 –

答えて

0

はい、値が非同期ロードされています。

Google APIの詳細はわかりませんが、request.executeメソッドの最初のパラメータは、応答がになったときにのみが実行されるコールバック関数でなければなりません。

このようにして、最後のconsole.log(video_id)は、の前に実行され、の前に実行されます。

関連する問題