我试图理解一些有一种新颖的承诺方法的代码:
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
方法有何不同?使用安全吗?
答案 0 :(得分:7)
这与正常的链式
.then
方法有何不同?
完全没有。您可以删除sequence
变量并直接链接.then()
方法调用,并且您将从承诺中获得完全相同的行为。
使用安全吗?
是
通常,你不应该。它(显然)只是令人困惑,不需要那个我为什么要用它?
sequence
变量,它只是更长。使用描述性名称创建变量可以使代码更加冗长和易于理解,但sequence
只是毫无意义。
但是,有一个优点:您可以构建动态链。您可以在if
块中放置一些这些赋值,甚至使用循环来构建可变长度和行为的promise链。通过在执行promise回调之前同步评估条件,与将所有控制流放在promise回调中相比,这甚至可能对性能有利(尽管在内存中创建了大量的promise对象)。无论如何,这种方法应该使用不同的描述性变量,而不是重复地重新分配给同一个变量。
答案 1 :(得分: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
}
);