jQuery推迟了ajax执行顺序
jQuery deferred ajax execution order
我想用promise一个接一个地链接多个函数,每个函数都进行AJAX调用。
像这样的东西:
function myfunction1() {
console.log("myfunction1");
return $.ajax({
url: "/"
}).always(function() {
console.log("myfunction1 done");
});
}
function myfunction2() {
console.log("myfunction2");
return $.ajax({
url: "/"
}).always(function() {
console.log("myfunction2 done");
});
}
myfunction1()
.then(myfunction2());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
在调用myfunction2
之前,我需要运行myfunction1
的回调。所以我需要这个订单:
myfunction1
myfunction1 done
myfunction2
myfunction2 done
但代码示例按以下顺序运行:
myfunction1
myfunction2
myfunction1 done
myfunction2 done
如有任何帮助,将不胜感激
解决方案:
不需要括号
myfunction1().then(myfunction2);
而不是:
myfunction1().then(myfunction2());
感谢@bergi
由于没有人将解决方案放入答案中,我将这样做以结束这个问题。
更改您的代码:
myfunction1().then(myfunction2());
到此:
myfunction1().then(myfunction2);
您只需要将一个函数引用传递给.then()
,这样它就可以在适当的时机调用函数LATER。当您将parens放在函数名之后时,您告诉JS解释器立即执行函数,然后将返回结果作为.then()
处理程序传递。这就是为什么它没有按所需的顺序执行。
这是一个非常常见的错误。请记住,将parens放在函数名后面会使其立即执行。单独传递函数名(不带parens)只会传递一个函数引用,该函数引用稍后可以由传递给它的函数/方法调用(这正是您想要的)。
您必须学习w.r.t promise链接。你可以简单地这样做。
myFunctionA().then(()=>
return myFunB;
).then(()=> {
//Do stuff after function b execution.`k`
}
我还没有测试过,但我希望它能起作用。如果有效,请接受它作为答案。
相关文章:
- javascript函数和代码隐藏函数的执行顺序
- Node.js:多个然后'It’执行顺序不正确
- 不同'单击'不同脚本中的回调:我可以控制执行顺序吗
- 代码混淆的执行顺序
- Javascript执行顺序错误
- Javascript执行顺序和回调
- 奇怪的javascript代码执行顺序
- for 循环/递归中的执行顺序
- JavaScript 中的执行顺序问题
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 控制承诺执行顺序
- 我可以信任 JavaScript 中声明中的执行顺序吗?
- 使用webcomponenetsjs的HTMLImports以意外的执行顺序加载导入-firefox
- 确保执行顺序:javascript
- Javascript代码的执行顺序
- 保证HTML表单提交和jQuery onclick的执行顺序
- 在ASP.Net中运行javascript时的执行顺序
- jQuery函数执行顺序
- Javascript中绑定到事件的函数的执行顺序
- 淘汰js可观察扩展的执行顺序是什么