`x = x.then()` 在 promises 中做了什么?
What does `x = x.then()` do in promises?
我正在尝试理解一些具有新颖承诺方法的代码:
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
方法有何不同? 使用安全吗?
可以放心使用。它等效于链接,但显式重新分配 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
}
);
How does this differ from the normal chained .then
approach?
完全没有。您可以删除 sequence
变量并直接链接 .then()
方法调用,您将从您的承诺中获得完全相同的行为。
Is it safe to use?
是的。
Why would I use it?
通常情况下,您不应该这样做。它(显然)只是令人困惑,不需要 sequence
变量,而且它更长。创建具有描述性名称的变量可以使代码更冗长和更容易理解,但是 sequence
只是没有意义。
但是,有一个好处:您可以构建动态链。您可以将其中一些赋值放在 if
块中,甚至可以使用循环来构建可变长度和行为的承诺链。通过在执行 promise 回调之前同步评估条件,与将所有控制流放在 promise 回调中相比,这甚至可能有利于性能(尽管在内存中创建了大量的 promise 对象)。无论如何,这种方法应该使用不同的描述性变量,而不是重复地重新分配给同一个变量。
我正在尝试理解一些具有新颖承诺方法的代码:
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
方法有何不同? 使用安全吗?
可以放心使用。它等效于链接,但显式重新分配 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
}
);
How does this differ from the normal chained
.then
approach?
完全没有。您可以删除 sequence
变量并直接链接 .then()
方法调用,您将从您的承诺中获得完全相同的行为。
Is it safe to use?
是的。
Why would I use it?
通常情况下,您不应该这样做。它(显然)只是令人困惑,不需要 sequence
变量,而且它更长。创建具有描述性名称的变量可以使代码更冗长和更容易理解,但是 sequence
只是没有意义。
但是,有一个好处:您可以构建动态链。您可以将其中一些赋值放在 if
块中,甚至可以使用循环来构建可变长度和行为的承诺链。通过在执行 promise 回调之前同步评估条件,与将所有控制流放在 promise 回调中相比,这甚至可能有利于性能(尽管在内存中创建了大量的 promise 对象)。无论如何,这种方法应该使用不同的描述性变量,而不是重复地重新分配给同一个变量。