2017-12-07 19 views
0

私は間違った値を返す不思議なPromiseの動作をしています。PromiseがJavaScriptで適切な値を返さない

var years = [] 
 

 
$.getJSON('https://omdbapi.com?t=titanic&apikey=thewdb') 
 
.then(function(movie){ 
 
    years.push(movie.Year) 
 
    return $.getJSON('https://omdbapi.com?t=shrek&apikey=thewdb') 
 
}) 
 
.then(function(movie){ 
 
    years.push(movie.Year) 
 
    console.log(years) // ["1997", "2001"] 
 
}) 
 

 
console.log(years) // [] return at the beginning
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

空の配列は、最初の場所に戻されているコードの端からである - 私には奇妙です。あなたはこれを説明する必要がありますか?ありがとう、

+0

getJsonは非同期です。 console.logは、getJSONが要求を解決して応答を処理する前に発生します。約束事のポイントは、将来*終了する*非同期ロジックです。約束事にコールバックを添付することで、それが取得されたときの応答*を処理できます。その時点までコードが実行されることはありません。 – Taplar

+0

Ajaxは**非同期です** ...最後の 'log()'はリクエストが完了する前に発生します – charlietfl

+0

Thanks Taplar and charlietfl。私は非同期についてより詳しく説明します。 –

答えて

0

最初のconsole.logが[]を印刷するのは、$ .getJSONと.then()関数がまだ実行されていないためです。これは非同期コードと呼ばれ、コード内に表示される順序で実行されないことがあります。

関連する問題