1

我正在尝试理解一些具有新颖的承诺方法的代码:

var sequence = Promise.resolve();

sequence = sequence.then(
    function() {
        // success function
    }
);

sequence = sequence.then(
    function(keyPair) {
        // success function
    },
    function(err) {
        // err function
    }
);

sequence = sequence.then(
    function(keyPair) {
        // success function
    },
    function(err) {
        // err function
    }
);

这与正常的链式.then方法有何不同?使用安全吗?

4

2 回答 2

6

这与正常的链式.then方法有何不同?

一点也不。您可以消除该sequence变量并.then()直接链接方法调用,并且您将从您的承诺中获得完全相同的行为。

使用安全吗?

是的。

我为什么要使用它?

通常,您不应该这样做。它(显然)只是令人困惑,不需要那个sequence变量,它只是更长。创建具有描述性名称的变量可以使代码更冗长且更易于理解,但sequence毫无意义。

但是,有一个优点:您可以构建动态链。您可以将其中一些分配放在if块中,甚至使用循环来构建可变长度和行为的承诺链。通过在执行 Promise 回调之前同步评估条件,与将所有控制流放在 Promise 回调中相比,这甚至可能有利于性能(尽管在内存中创建大量的 Promise 对象)。无论如何,这种方法应该使用不同的描述性变量,而不是重复地重新分配给同一个变量。

于 2015-07-12T20:25:49.163 回答
1

那是可以安全使用的。它等效于链接,但显式地重新分配了then函数返回的承诺。

换句话说,它就像写的一样

sequence = sequence.then(
    function() {
        // success function
    }
).then(
    function(keyPair) {
        // success function
    },
    function(err) {
        // err function
    }
).then(
    function(keyPair) {
        // success function
    },
    function(err) {
        // err function
    }
);
于 2015-07-12T20:08:23.700 回答