<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      Jscex沒有xxxAsync().stop()怎么辦?

      2011-11-17 22:09  【當(dāng)耐特】  閱讀(2648)  評論(5)    收藏  舉報

      今天一同事問我Jscex怎么沒有stop啊?

      異步任務(wù)就像斷線的風(fēng)箏,我們沒法讓它說停就停,但是我們在放飛它之前,可以裝個定時炸彈。

       

      通常我們可以這樣退出一個異步任務(wù):

             var xxxAsync = eval(Jscex.compile("async", function () {
                 while (condition) {
                     ....
                     dosomething
                     ....        
                     $await(Jscex.Async.sleep(1000));
                 }
             }))

      通過condition判斷是否退出異步任務(wù)。或者等同于下面這種方式:

             var xxxAsync = eval(Jscex.compile("async", function () {
                 while (true) {
                     if(condition)break;
                     ....
                     dosomething
                     ....        
                     $await(Jscex.Async.sleep(1000));
                 }
             }))

      這兩種方式的效果是一模一樣的。

      下面這種方式有個好處就是可以做一些初始化設(shè)置什么的:

             var xxxAsync = eval(Jscex.compile("async", function () {
                 while (true) {
                     if (condition) {
                         //dosomething
                         break;
                     }
                     //dosomething      
                     $await(Jscex.Async.sleep(1000));
                 }
             }))

       

      后來,同事又提供了一個要跳出循環(huán)的場景

             var xxxAsync = eval(Jscex.compile("async", function () {
                 while (true) {
                     for (i in XXX) {
                         if (condition) { 
                         //要在這里跳出最外層的循環(huán)
                         }
                     }
                     //dosomething      
                     $await(Jscex.Async.sleep(1000));
                 }
             }))

       

      所以就只能這樣:

             var xxxAsync = eval(Jscex.compile("async", function () {
                 while (true) {
                     for (i in XXX) {
                         if (condition) {
                             //要在這里跳出最外層的循環(huán)
                             breakTag = true;
                         }
                     }
                     if (breakTag) break;
                     //dosomething      
                     $await(Jscex.Async.sleep(1000));
                 }
             }))

      后來同事又提供了一個BT的場景:

             var countAsync1 = eval(Jscex.compile("async", function () {
                 while (true) {
                     for (i in XXX) {
                         if (condition) {
                             //要在這里跳出最外層的循環(huán)
                         }
                     }
                     $await(Jscex.Async.sleep(1000));
                 }
             }))
             var countAsync2 = eval(Jscex.compile("async", function () {
                 while (true) {
                     for (i in XXX) {
                         if (condition) {
                             //要在這里跳出最外層的循環(huán)
                         }
                     }     
                     $await(Jscex.Async.sleep(1000));
                 }
             }))
             
             var executeAsyncQueue = eval(Jscex.compile("async", function () {
                 while (true) {
                     $await(countAsync1())
                     $await(countAsync2())
                     $await(Jscex.Async.sleep(1000));
                 }
      
             }))
             executeAsyncQueue().start();

      相當(dāng)于要在異步隊列中跳出最最外層的循環(huán)。

      我給出的方案還是breakTag

             var executeAsyncQueue = eval(Jscex.compile("async", function () {
                 while (true) {
                     $await(countAsync1())
                     $await(countAsync2())
                     if (breakTag) break;
                     $await(Jscex.Async.sleep(1000));
                 }
      
             }))

       

      同理這個場景也用tag:

              var xxAsync = eval(Jscex.compile("async", function () {
                  while (true) {
                      //dosomething
                      $await(xxxAsync())
                      if (breakTag) break;
                      $await(Jscex.Async.sleep("1000"));
                  }
              }))
      
              var xxxAsync = eval(Jscex.compile("async", function () {
                  if (condition) {
                      breakTag = true;
                  }
                  $await(Jscex.Async.sleep("1000"));
      
              }))

      所以:Jscex沒有必要提供stop,你說呢?

      Jscex.Async.Task = function (delegate) {
          this._delegate = delegate;
          this._handlers = [];
          this.status = "ready";
      }
      Jscex.Async.Task.prototype = {
          start: function () {
              if (this.status != "ready") {
                  throw 'Task can only be started in "ready" status.';
              }
      
              var _this = this;
      
              this.status = "running";
              this._delegate["onStart"](function (type, value) {
      
                  if (_this.status != "running") {
                      throw ('Callback can only be used in "running" status.');
                  }
      
                  if (type == "success") {
      
                      _this.result = value;
                      _this.status = "succeeded";
      
                  } else if (type == "failure") {
      
                      _this.error = value;
                      _this.status = "failed";
      
                  } else if (type == "cancel") {
      
                      _this.status = "canceled";
      
                  } else {
                      throw ("Unsupported type: " + type);
                  }
                  
                  _this._notify();
              });
          },
      
          cancel: function () {
              if (this.status != "running") {
                  throw 'Task can only be canceled in "running" status';
              }
      
              var onCancel = this._delegate["onCancel"];
              if (onCancel) onCancel();
      
              this._notify();
          },
      
          _notify: function () {
              var handlers = this._handlers;
              delete this._handlers;
              
              for (var i = 0; i < handlers.length; i++) {
                  handlers[i](this);
              }
          },
      
          addListener: function (handler) {
              if (!this._handlers) {
                  throw ('Listeners can only be added in "ready" or "running" status.');
              }
      
              this._handlers.push(handler);
          }
      };
      主站蜘蛛池模板: 97人妻天天摸天天爽天天| 人妻丰满熟妇AV无码区乱| 在线观看潮喷失禁大喷水无码| 亚洲国产大片永久免费看| 中文字幕亚洲综合第一页| 亚洲精品无码av天堂| 国产特级毛片AAAAAA视频| 人成午夜大片免费视频77777| 丰满少妇被猛烈进出69影院| 97香蕉碰碰人妻国产欧美| 国产无遮挡又黄又爽不要vip软件| 精品人妻二区中文字幕| 化德县| 精品无码久久久久久尤物| 人人超碰人摸人爱| 伊人春色激情综合激情网| 亚洲国产在一区二区三区| 2021亚洲va在线va天堂va国产| 成人做受120秒试看试看视频| 普兰县| 99精品国产一区二区三| 天堂中文最新版在线官网在线| 国产一区二区丰满熟女人妻| 奇米四色7777中文字幕| 男人狂桶女人出白浆免费视频 | 国产美女裸身网站免费观看视频 | 熟妇人妻久久春色视频网| 国产精品乱子乱xxxx| 成人午夜免费无码视频在线观看 | 日韩精品有码中文字幕| 亚洲一区二区日韩综合久久| 婷婷五月综合激情| 国产精品综合一区二区三区| 亚洲三级香港三级久久| 欧美日韩国产亚洲沙发| 换着玩人妻中文字幕| 国产日产免费高清欧美一区| 国产成人亚洲欧美二区综合| 亚洲一区二区三区四区| 亚洲欧美综合人成在线| 深夜免费av在线观看|