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)
    }
}

这个高阶函数由两个给定的函数组成,因此第二个函数只有在第一个函数成功时才会运行。现在实现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 回答