Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么可以';t/should';我是否使用while循环来监视异步jQuery操作?_Javascript_Jquery_Ajax_Asynchronous_Coordinate - Fatal编程技术网

Javascript 为什么可以';t/should';我是否使用while循环来监视异步jQuery操作?

Javascript 为什么可以';t/should';我是否使用while循环来监视异步jQuery操作?,javascript,jquery,ajax,asynchronous,coordinate,Javascript,Jquery,Ajax,Asynchronous,Coordinate,我正试图集中精力协调异步操作。我需要一点帮助来理解: 为什么使用while循环等待操作完成是一个坏主意并且不起作用,以及 如果有对jQuery函数使用回调的可行替代方法 大多数情况下,向异步函数(如$.get())添加回调非常有效。然而,在某种程度上,这确实决定了我不喜欢的代码的编写方式和位置 $(function() { var r = AjaxResults( page ); // loop prevents further processing until GetRes

我正试图集中精力协调异步操作。我需要一点帮助来理解:

  • 为什么使用while循环等待操作完成是一个坏主意并且不起作用,以及
  • 如果有对jQuery函数使用回调的可行替代方法
  • 大多数情况下,向异步函数(如$.get())添加回调非常有效。然而,在某种程度上,这确实决定了我不喜欢的代码的编写方式和位置

    $(function() {
    
        var r = AjaxResults( page );
    
        // loop prevents further processing until GetResults() is done
        while( isComplete == false )
        isComplete = $('body').data('isComplete');
    
        // reset isComplete boolean
        $('body').data('isComplete', false);
    
        // this will only continue after GetResults() has exited
        paintTheTownRed();
        var whateverElse = true;
    });
    
    function AjaxResults( page ) {
    
       // do something before async operation
       switch( page ){
           case '1': {...} break;
           ...
           default: break;
       } 
    
       $.getJSON("/controller/page", null, function(data) {
    
           // do something after async operation
           {...}
    
           $('body').data('isComplete', true);
           return data;
       });
    }
    

    因为它会占用我的CPU,让我非常恼火

    您编写代码的地方几乎从不由异步/同步指定;函数是函数,无论它们是匿名的、以行方式编写的,还是作为引用命名和传递的

    此外,承诺并帮助决定在何处/如何实现功能


    查看类似的内容以了解更多细节和想法,但还有其他方法可以使用它们。

    因为这会占用我的CPU并使我非常恼火

    您编写代码的地方几乎从不由异步/同步指定;函数是函数,无论它们是匿名的、以行方式编写的,还是作为引用命名和传递的

    此外,承诺并帮助决定在何处/如何实现功能


    查看其他细节和想法,但还有其他方法可以使用它们。

    简而言之,你不应该这样做,因为这将是一种非常糟糕的用户体验,会严重激怒大多数/所有观众。充其量,它会刺激CPU,不必要地耗尽观众的电池。最坏的情况是,观众会认为他们的浏览器冻结/挂起

    由于javascript是单线程的,并且单线程性与浏览器中的用户事件处理有关,因此如果使用while循环来循环等待异步事件完成,则会在while循环期间锁定浏览器。您可能还会发现,某些浏览器会向用户发出有关javascript运行时间过长的警告

    对于javascript中的异步编程,目前没有其他方法可以替代某些类型的回调。如果您想使用异步操作,那么您必须根据它们的工作方式调整编程风格,以保持良好的用户体验。是的,这意味着调整您的编程风格,但这是为了保持良好的用户体验而付出的代价。如果您想研究这一点,可以提供一种稍微更令人愉快的代码编写风格(仍然是回调,但似乎不那么令人愉快)

    要做到你所建议的,就要在用户体验之前优先考虑你的编程便利性,这只是一个糟糕/懒惰的程序员的标志,他们的目标/优先权似乎颠倒了


    仅供参考,这将是一种糟糕的编程实践,即使是在允许使用它的环境中(如本机Windows开发)。

    简而言之,您不应该这样做,因为这将是一种非常糟糕的用户体验,并且会严重激怒大多数/所有观众。充其量,它会刺激CPU,不必要地耗尽观众的电池。最坏的情况是,观众会认为他们的浏览器冻结/挂起

    由于javascript是单线程的,并且单线程性与浏览器中的用户事件处理有关,因此如果使用while循环来循环等待异步事件完成,则会在while循环期间锁定浏览器。您可能还会发现,某些浏览器会向用户发出有关javascript运行时间过长的警告

    对于javascript中的异步编程,目前没有其他方法可以替代某些类型的回调。如果您想使用异步操作,那么您必须根据它们的工作方式调整编程风格,以保持良好的用户体验。是的,这意味着调整您的编程风格,但这是为了保持良好的用户体验而付出的代价。如果您想研究这一点,可以提供一种稍微更令人愉快的代码编写风格(仍然是回调,但似乎不那么令人愉快)

    要做到你所建议的,就要在用户体验之前优先考虑你的编程便利性,这只是一个糟糕/懒惰的程序员的标志,他们的目标/优先权似乎颠倒了

    仅供参考,这将是一个糟糕的编程实践,即使是在允许使用它的环境中(如本机Windows开发)

    大多数情况下,向异步函数(如
    $.get()
    )添加回调非常有效。然而,在某种程度上,这确实决定了我不喜欢的代码的编写方式和位置

    不再需要直接向AJAX函数添加回调

    使用jQuery可以在不需要过多嵌套的情况下,在需要的地方编写代码:

    function AjaxResults( page ) {
        ...  // prep
        return $.getJSON("/controller/page", null)
            .done(function(data) {
                // always do this
            });
    }
    
    AjaxResults(page).done(paintTheTownRed);
    
    请务必将自己的
    complete
    处理程序放在
    $.getJSON
    上,如图所示,但通过返回
    jqXHR
    对象,您就有机会执行额外的操作,而无需传递大量回调或嵌套代码

    大多数情况下,向异步函数(如
    $.get()
    )添加回调非常有效。然而,在某种程度上,这确实决定了我不喜欢的代码的编写方式和位置

    不再需要直接向AJAX函数添加回调

    使用jQuery可以在不需要过多嵌套的情况下,在需要的地方编写代码:

    function AjaxResults( page ) {
        ...  // prep
        return $.getJSON("/controller/page", null)
            .done(function(data) {
                // always do this
            });
    }
    
    AjaxResults(page).done(paintTheTownRed);
    

    请务必将自己的
    complete
    处理程序放在
    $.getJSON
    上,如图所示,但通过返回
    jqXHR
    对象,您就有机会执行额外的操作,而无需传递大量回调或嵌套代码。

    如果您的问题是不喜欢定义在$.get()中调用的函数,然后尽可能将其作为单独的函数写入:

    $(function() {
    
        AjaxResults( page );
    
    });
    
    function AjaxResults( page ) {
    
       // do something before async operation
       switch( page ){
           case '1': {...} break;
           ...
           default: break;
       } 
    
       $.getJSON("/controller/page", null, doWhatever);
    }
    
    function doWhatever(data) {
        paintTheTownRed();
        var whateverElse = true;
    }
    

    如果你的问题是你不喜欢定义