JavaScript異歩

1371 ワード

1.一般的な非同期操作
  • ネットワーク要求:ajax http.get
  • IO操作:readdir readFile
  • タイミング関数:setTimeout setInterval
  • 2.event-loop
    参见:阮一峰--JavaScript運行メカニズム詳細解:Event-look
  • JavaScriptは単スレッド言語です.
  • すべてのタスクは列に並び、前のタスクが終わったら、後のタスクが実行されます.
  • のすべてのタスクは、同期タスク(synchronous)、もう一つは非同期タスク(asynchronous)に分けられます.
  • (1)すべての同期タスクがメインスレッド上で実行され、実行スタックが形成される.(2)メインライン以外に、「タスクキュー」が存在します.非同期タスクに実行結果がある限り、「タスクキュー」にイベントを配置します.(3)一旦「実行スタック」の中のすべての同期タスクが実行されると、システムは「タスクキュー」を読み込み、中にどのようなイベントがあるかを確認します.これらの対応する非同期タスクは、待ち状態を終了し、実行スタックに入り、実行を開始する.(4)メインスレッドは上記の第3ステップを繰り返します.
  • マスタスレッドが「タスクキュー」からイベントを読み出すと、このプロセスはループが継続されるため、全体のこのような動作機構は、Event Loop(イベントサイクル)とも呼ばれる.
  • 3.jQuery-1.5以降のajax
    伝統ajax:
    var ajax = $.ajax({
        url: 'data.json',
        success: function () {
            console.log('success')
        },
        error: function () {
            console.log('error')
        }
    })
    
    console.log(ajax) //      XHR   
    
    jQuery-1.5以降のajax:
    var ajax = $.ajax('data.json')
    ajax.done(function () {
            console.log('success 1')
        })
        .fail(function () {
            console.log('error')
        })
        .done(function () {
             console.log('success 2')
        })
    
    console.log(ajax) //      deferred