我创建了一个示例来向您展示我的问题是什么。我将发布代码,然后解释。
我的 JS:
$('#mybtn').on('click', function(){
//$(fn1).promise().done(fn2);
$.Deferred(fn1).then(fn2);
});
function fn1(){
console.log("1");
$.ajax({
url: 'ajax.php',
type: 'POST',
data: {
func: "1"
},
success: function(data){
console.log(data);
}
});
}
function fn2(){
console.log("2");
$.ajax({
url: 'ajax.php',
type: 'POST',
data: {
func: "2"
},
success: function(data){
console.log(data);
}
});
}
我的PHP:
<?php
$request = $_POST['func'];
switch ($request) {
case '1':
fn1();
break;
case '2':
fn2();
break;
}
function fn1(){
print "1";
sleep(4);
}
function fn2(){
print "2";
sleep(2);
}
?>
所以,我尝试了这两种方法来调用函数并等待它们结束,第一种://$(fn1).promise().done(fn2); 打印 1, 2 然后 2, 1。第二个:$.Deferred(fn1).then(fn2); 打印 1、1 并停止,甚至不调用 fn2,我要打印的是 1、1、2、2。我可以解决在变量中返回 ajax 请求的问题,然后只需使用 promise().done但我不能那样做,我需要等待功能而不改变它,这可能吗?我的意思是这样的:
toWait.someWayToWait().then(anotherFunctionToWait());
function toWait(){
//whatever code or functions in here.
fn1();
fn2();
fnX();
}
function anotherFunctionToWait(){
//whatever code or functions in here.
}
谢谢你。