使用函数的链式承诺不 return 所需的回调序列
Chain promise using functions doesn't return desired callback sequence
1.I 正在尝试通过在全局 promise 对象上使用函数来链接一些 promise。链式序列并不像我想的那样起作用。以下代码输出 1 3 4 2。
2.I 想知道这是什么原因。我的想法是在变量声明传递中,p.then() 函数已注册但未注册其以下承诺,直到 p.then() 函数 returns,它才开始将第二个 then 函数推入回调队列。
为了回答我为什么要这样做的问题,我试图对一系列操作使用构建器模式。
例如,builder().setupTestEnv().connectToDatabase().setupAuthServer().setupAuthClient()。此链中的每个函数都旨在执行 _globalPromiseObject.then() 以链接后续操作。
我知道另一种解决方案是,使用 execute() 调用结束构建器链,其中 运行 Q.all() 到 运行 按顺序执行所有承诺。但只是对承诺链的这种行为感到好奇。
const Q = require('q');
const p = Q();
p
.then(
function(){
console.log(1);
}
)
.then(
function(){
console.log(2);
}
);
function foo(){
p.then(
function () {
console.log(3);
}
);
}
function bar(){
p.then(
function () {
console.log(4);
}
);
}
foo();
bar();
不确定这是否 100% 回答了您的问题,但从您的示例中有意义的陈述的角度来看这个问题可能会有所帮助:
p.then()
foo()
bar()
- 最后,#1 的
then
触发了
这三个操作紧接着发生,同步。让我们删除 foo
和 bar
包装器,就好像您编写了它们的内容而不是调用它们:
p.then(/* log 1 */)
p.then(/* log 3 */)
foo 的内容
p.then(/* log 4 */)
条的内容
- 最后,#1 的
then
触发了
您可以从各自的函数中 return
foo()
和 bar()
,然后将 foo
和 bar
传递给 .then()
.then(foo).then(bar)
或 return
foo()
和 bar()
来自 .then(function(){ return foo() })
const p = Promise.resolve();
p
.then(
function() {
console.log(1);
}
)
.then(
function() {
console.log(2);
}
)
.then(function() {
return foo()
})
.then(function() {
return bar()
})
function foo() {
return p.then(
function() {
console.log(3);
return
}
);
}
function bar() {
return p.then(
function() {
console.log(4);
return
}
);
}
1.I 正在尝试通过在全局 promise 对象上使用函数来链接一些 promise。链式序列并不像我想的那样起作用。以下代码输出 1 3 4 2。 2.I 想知道这是什么原因。我的想法是在变量声明传递中,p.then() 函数已注册但未注册其以下承诺,直到 p.then() 函数 returns,它才开始将第二个 then 函数推入回调队列。
为了回答我为什么要这样做的问题,我试图对一系列操作使用构建器模式。 例如,builder().setupTestEnv().connectToDatabase().setupAuthServer().setupAuthClient()。此链中的每个函数都旨在执行 _globalPromiseObject.then() 以链接后续操作。
我知道另一种解决方案是,使用 execute() 调用结束构建器链,其中 运行 Q.all() 到 运行 按顺序执行所有承诺。但只是对承诺链的这种行为感到好奇。
const Q = require('q');
const p = Q();
p
.then(
function(){
console.log(1);
}
)
.then(
function(){
console.log(2);
}
);
function foo(){
p.then(
function () {
console.log(3);
}
);
}
function bar(){
p.then(
function () {
console.log(4);
}
);
}
foo();
bar();
不确定这是否 100% 回答了您的问题,但从您的示例中有意义的陈述的角度来看这个问题可能会有所帮助:
p.then()
foo()
bar()
- 最后,#1 的
then
触发了
这三个操作紧接着发生,同步。让我们删除 foo
和 bar
包装器,就好像您编写了它们的内容而不是调用它们:
p.then(/* log 1 */)
p.then(/* log 3 */)
foo 的内容
p.then(/* log 4 */)
条的内容- 最后,#1 的
then
触发了
您可以从各自的函数中 return
foo()
和 bar()
,然后将 foo
和 bar
传递给 .then()
.then(foo).then(bar)
或 return
foo()
和 bar()
来自 .then(function(){ return foo() })
const p = Promise.resolve();
p
.then(
function() {
console.log(1);
}
)
.then(
function() {
console.log(2);
}
)
.then(function() {
return foo()
})
.then(function() {
return bar()
})
function foo() {
return p.then(
function() {
console.log(3);
return
}
);
}
function bar() {
return p.then(
function() {
console.log(4);
return
}
);
}