JS Promise Async Await
jsの比較的新しい機能のPromiseとasync/awaitを使って非同期関数を同期関数っぽくみせかけることが出来る。
たとえば、jquery uiのconfirmダイアログをwindow標準のconfirmと似たような使い勝手にすることも一応可能。
function myconfirm_promise() { var promise = new Promise(function(resolve, reject) { $("#dialog").dialog({ modal:true, buttons: [ {text: "OK", click: function() { resolve(true); }}, {text: "Cancel", click: function() { resolve(false); }}, ] }); }); return promise; } function async hoge() { var ret = await myconfirm_promise(); if (ret) { // OKが押された } else { // Cancelが押された。 } }
一応可能と言ったのは、完全に同じではないから。
同期関数ぽく見えてるだけで、function async hoge()関数自体は非同期関数である。
つまり、
hoge(); //この部分の続きの処理はhoge()の呼出のあと普通に実行されてしまう。 。。。
var ret = await myconfirm_promise();
の呼びだしが、
var ret = confirm();
だった場合、
hoge関数は同期関数になり、OK/Cancelが押されるまで、以降の処理の実行は完全にブロックされる。