刺身の上にたんぽぽ乗せる日記

プログラミングしたり、自販機の下に落ちてる小銭を集めたりしてます

Javascriptで非同期処理を同期処理っぽく書けないかね?

まぁ、もともと作ろうと考えていたネタなんですが、

function foo(arg1, arg2) {
    doSomeRPC(arg1, onCallback1);
    function onCallback1(result1) {
        doAnotherRPC(arg2, onCallback2);
        function onCallback2(result2) {
            bar(result1, result2);
        }
    }
}

Closureがない言語より色々と大分楽なわけなんですが、それでもネストしすぎうんこー。

function foo(arg1, arg2) {
    var result1 = doSomeRPC(arg1);
    var result2 = doAnotherRPC(arg2);
    bar(result1, result2)
}

これを上のやつに翻訳すればいいような気もするけど、コードに書いてある通りの順番に実行されないから、期待しない競合状態になりそうで怖い。