为什么不能/不应该使用while循环来监视异步jQuery操作?

dou*_*ack 1 javascript ajax jquery asynchronous coordinate

我试图围绕协调异步操作.我需要一点帮助理解:

  1. 为什么使用while循环等待操作完成是一个坏主意,并且不起作用,并且
  2. 如果有可行的替代方法在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;
   });
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ton 8

因为它会刺激我的CPU并激怒我.

你写你的代码几乎从来没有非同步/同步决定; 函数是函数,无论它们是匿名的还是内联编写的,还是作为引用命名和传递的.

此外,promises和deferred对象有助于决定实现功能的位置和方式.

有关其他详细信息和想法,请参阅.when(docs)等内容,但还有其他方法可以使用它们.