この回答ではpromises
、ECMAScript 6
標準のJavaScript機能であるを使用しています。ターゲットプラットフォームがをサポートしていない場合はpromises
、PromiseJでポリフィルします。ます。
プロミスは、JavaScriptで非同期操作を処理するための新しい(そしてはるかに優れた)方法です。
$('a.button').click(function(){
if (condition == 'true'){
function1(someVariable).then(function() {
//this function is executed after function1
function2(someOtherVariable);
});
}
else {
doThis(someVariable);
}
});
function function1(param, callback) {
return new Promise(function (fulfill, reject){
//do stuff
fulfill(result); //if the action succeeded
reject(error); //if the action did not succeed
});
}
これは、この単純な例では大きなオーバーヘッドのように見えるかもしれませんが、より複雑なコードの場合は、コールバックを使用するよりもはるかに優れています。複数のthen
ステートメントを使用して、複数の非同期呼び出しを簡単にチェーンできます。
function1(someVariable).then(function() {
function2(someOtherVariable);
}).then(function() {
function3();
});
jQuery遅延を簡単にラップすることもできます($.ajax
呼び出しから返されます)。
Promise.resolve($.ajax(...params...)).then(function(result) {
//whatever you want to do after the request
});
@charlietflが述べたように、jqXHR
によって返されるオブジェクト$.ajax()
はPromise
インターフェースを実装します。したがって、実際にでラップする必要はなくPromise
、直接使用できます。
$.ajax(...params...).then(function(result) {
//whatever you want to do after the request
});
function1
非同期操作を実行しますか?