【问题标题】:Call functions asynchronous without change the function异步调用函数而不改变函数
【发布时间】:2013-06-09 23:43:45
【问题描述】:

我创建了一个示例来向您展示我的问题所在。我把代码贴出来,然后解释一下。

我的 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.
}

谢谢。

【问题讨论】:

  • 不能给每个函数传入回调?
  • @tymeJV 我想我没明白,你到底是什么意思?
  • function fn1(callback)则引用成功中的回调函数
  • @tymeJV 如何为每个函数添加回调? '-' 我猜它不会等待它们内部的函数结束......
  • @tymeJV 嗯,想...

标签: jquery ajax asynchronous


【解决方案1】:

没有。由于这些函数无法让调用者知道它何时完成,因此您不能等待它们完成。您需要以某种方式更改功能。

严格来说,它可以通过猴子补丁来完成,但这是一种可怕的方式。

【讨论】:

    猜你喜欢
    • 2019-09-02
    • 2012-07-25
    • 1970-01-01
    • 2022-11-14
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2018-12-13
    相关资源
    最近更新 更多