我想用promises一个接一个地链接多个函数,每个函数都进行一次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>
&#13;
在调用myfunction1
之前,我需要myfunction2
的回调才能运行。
所以我需要这个订单:
myfunction1
myfunction1 done
myfunction2
myfunction2 done
但代码示例按此顺序运行:
myfunction1
myfunction2
myfunction1 done
myfunction2 done
任何帮助将不胜感激
解决方案:
不需要括号
myfunction1().then(myfunction2);
而不是:
myfunction1().then(myfunction2());
感谢@bergi
答案 0 :(得分:0)
由于没有人将解决方案作为答案,我将这样做以便结束这个问题。
从此处更改您的代码:
myfunction1().then(myfunction2());
到此:
myfunction1().then(myfunction2);
您只需要将函数引用传递给.then()
,以便在适当的时机调用函数LATER。当您将parens放在函数名后面时,您告诉JS解释器立即执行该函数,然后将返回结果作为.then()
处理程序传递。这就是为什么它没有按照预期的顺序执行。
这是一个非常常见的错误。请记住,在函数名称后面放置parens会导致它立即执行。单独传递函数名称(没有parens)只会传递一个函数引用,稍后可以通过传递给它的函数/方法调用它(这就是你想要的)。
答案 1 :(得分:0)
您必须学习w.r.t许诺链接。您可以简单地做到这一点。
myFunctionA().then(()=>
return myFunB;
).then(()=> {
//Do stuff after function b execution.`k`
}
我还没有测试过,但是我希望它能工作。 如果可以,请接受它作为答案。