链接ajax jquery的两种方式调用。正确对象,真爱?

时间:2017-10-18 16:53:58

标签: javascript jquery ajax promise chain

我有下一个ajax调用链:

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

正如你所看到的,我没有返回ajax调用,但它的工作正常。下一个方法就是我所看到的例子:

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

什么是正确的方法?

由于

2 个答案:

答案 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 => {

  })

如果订单很重要,请使用您的第二种方法。