链接 ajax jquery 调用的两种方式。正确的那一个?

Two ways of chaining ajax jquery calls. Right one?

我有下一个 ajax 调用链:

ajaxCall1().then(function(){
    ajaxCall2(). then(function(){
       ajaxCall3().then(function(){
            ....
        })
    })
 })

如您所见,我没有返回 ajax 调用,但它工作正常。接下来的方法是我看到的例子:

 ajaxCall1()
   .then(function(){
        return ajaxCall2()
    })
   .then(function(){
        return ajaxCall3()
    }).then(function(){
        ....
    })

正确的方法是什么?

谢谢

第一个模式实际上是well-known promise anti-pattern

promises 的可链接性使我们能够摆脱嵌套回调并保持垂直结构。

第二个。在第一个中,您不创建承诺链。第一个应该是这样的:

ajaxCall1().then(function() {
  return ajaxCall2().then(function() {
    return ajaxCall3().then(function() {
      .....
    })
  })
})

但即便如此,您仍然拥有深层嵌套,这通常是一种糟糕的编码风格。

如果你想并行执行这些请求,这些请求不相互依赖并且它们完成的顺序无关紧要,你可以这样写:

Promise.all([
    ajaxCall1(),
    ajaxCall2(),
    ajaxCall3()
  ])
  .then(results => {

  })

如果顺序很重要,请使用第二种方法。