链接 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 => {
})
如果顺序很重要,请使用第二种方法。
我有下一个 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 => {
})
如果顺序很重要,请使用第二种方法。