4

誰かがJavaScriptで継続を渡すという概念を私に説明してもらえますか? このhttp://nathansjslessons.appspot.com/lesson?id=1090を読んで、与えられた演習を解こうとして理解しようとしていますが、解けないようです。

それを行う正しい方法は何ですか?

私はこれを試しました:

var bothC = function (fC, gC, success, failure) {
    var f_success, f_failure;
    f_success = function () {
        success();
    };
    f_failure = function () {
        var g_success, g_failure;
        g_success = function () {
            success();
        };
        g_failure = function () {
            failure();
        };
        gC(g_success, g_failure);
    };
    fC(f_success, f_failure);
};
4

2 に答える 2

2

私はこれを試しました

いいえ、基本的には、それらの機能を再実装したものをコピーしただけです。seqC

それを行う正しい方法は何ですか?

function bothC(fC, gC, success, failure) {
    fC(function() {
        gC(success, failure);
    }, function() {
        gC(failure, failure);
    });
}
于 2014-05-20T18:34:11.113 に答える
1

この演習への実用的なアプローチは、次のような効用関数を定義することです。

function pipe(f, g) {
    return function(success, failure) {
        f(function() {
            g(success, failure)
        }, failure)
    }
}

この高階関数は、最初の関数が成功した場合にのみ 2 番目の関数が実行されるように、2 つの指定された関数を構成します。の実装はbothC簡単になります。

var bothC = function (fC, gC, hC, success, failure) {
    pipe(fC, gC)(success, failure);
};

複数の引数も問題ありません:

var allC = function (funcList, success, failure) {
    funcList.reduce(function(x, f) { return pipe(x, f)})(success, failure)
};
于 2014-05-20T19:14:36.563 に答える