我有下一个ajax调用链:
ajaxCall1().then(function(){
ajaxCall2(). then(function(){
ajaxCall3().then(function(){
....
})
})
})
正如你所看到的,我没有返回ajax调用,但它的工作正常。下一个方法就是我所看到的例子:
ajaxCall1()
.then(function(){
return ajaxCall2()
})
.then(function(){
return ajaxCall3()
}).then(function(){
....
})
什么是正确的方法?
由于
答案 0 :(得分:3)
第一种模式实际上是well-known promise anti-pattern。
承诺的可连接性使我们能够摆脱嵌套回调并保持垂直结构。
答案 1 :(得分:3)
第二个。在第一个中,您不会创建承诺链。第一个看起来应该是这样的:
ajaxCall1().then(function() {
return ajaxCall2().then(function() {
return ajaxCall3().then(function() {
.....
})
})
})
但即便如此,你也有深度嵌套,这通常是一种糟糕的编码风格。
如果你想并行执行请求,那些请求并不依赖于彼此,并且它们完成的顺序与你写的无关紧要:
Promise.all([
ajaxCall1(),
ajaxCall2(),
ajaxCall3()
])
.then(results => {
})
如果订单很重要,请使用您的第二种方法。