继续传递JavaScript

时间:2014-05-20 17:49:13

标签: javascript continuation-passing

有人可以向我解释在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);
};

2 个答案:

答案 0 :(得分:2)

  

我试过这个

不,你基本上只是复制重新实现了他们的seqC功能。

  

这样做的正确方法是什么?

function bothC(fC, gC, success, failure) {
    fC(function() {
        gC(success, failure);
    }, function() {
        gC(failure, failure);
    });
}

答案 1 :(得分:1)

这个练习的实用方法是定义一个这样的效用函数:

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

这个高阶函数组成两个给定的函数,这样第二个函数只有在第一个函数成功时才会运行。现在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)
};