を私はあなたがあなたのプログラム内のいくつかの非同期コードを持っていると仮定していますこと、例えば、動的HTMLを作成します。これは、すべての関数がいつ完全に実行されるかわからない場合に当てはまります。
この問題は2つの部分に分割できます。
- あなたが同期コードYの後に、関数Xを呼び出した場合、XがYの
- 後に起こるのだろう。しかし、あなたが非同期コードYの後に、関数Xを呼び出している場合は、あなたが最初に実行されるかわかりません。
解決するには、スクリプトの最後にコードを挿入するだけです。 2)を解決するには、jQueryの遅延を使用し、プログラムに明示的に指示する必要があります.X、Y、Zが実行されたときにこれを実行します。約束が何であるかの
クイック説明(および非常に正確ではない):
約束は、方法(thenable)を持つオブジェクトです。その後、この方法 は約束は、あなたがアニメーションの場合に解決される約束を作成するために.promise()メソッドを使用することができ、アニメーションから
を 解決されたときに呼び出される関数を受け取ることができます完了しました。あなたは、サービスへの呼び出しを行っている場合
var animationPromise = $('h1')
.css({'left': '0', 'position' : 'relative'})
.animate({'left': '20px'}, 700, 'linear')
.promise()
は、jQueryのポスト、は約束たぶん
// save the promise for later use
var asyncPromise = $.get('https://jsonplaceholder.typicode.com/users');
// execute some the function that uses this data
asyncPromise.then(function(users) { /* do something with the data */ })
を返し、とAJAXを取得し、あなたはどちらもありませんいくつかの機能を持っていますAJAXやアニメーションの場合は、あなた自身の約束を作成することができます。たとえば、この約束はsetTimeoutから解決されます。
var backgroundChange = $.Deferred()
setTimeout(function() {
$('body').css('background', 'lightblue')
backgroundChange.resolve(true)
}, 3000) /* Please note that backgroundChange
doesn't know that it will be resolved after 3 seconds */
後で、あなたは(.whenを使用することができます...)を使用して、一連の約束が解決されたときに解決される約束を作成します。ここで
$.when(asyncPromise, backgroundChange, animationPromise)
.then(function() {
$('.container').css('color', 'blue')
//alert('Everything is done!');
})
は二つの問題https://codepen.io/anon/pen/JWBXLd?editors=1010
完全なコードを追加を解決作業例..です –