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が押されるまで、以降の処理の実行は完全にブロックされる。