1. 程式人生 > >JS 非同步回撥

JS 非同步回撥

Js 非同步回撥

回撥概念:回撥是一個函式被作為一個引數傳遞到另一個函式裡,在那個函式執行完後再執行。
有點繞,好,咱們說大白話。就是B函式被作為引數傳遞到A函式裡,在A函式執行完後再執行B

 

下面咱們看看程式碼怎麼實現回撥。

function A(callback){

    console.log("I am A");

    callback();  //呼叫該函式

}

 

function B(){

   console.log("I am B");

}

 

A(B);

 

非同步回撥

因為js是單執行緒的,但是有很多情況的執行步驟(ajax請求遠端資料,IO等)是非常耗時的,如果一直單執行緒的堵塞下去會導致程式的等待時間過長頁面失去響應,影響使用者體驗了。

如何去解決這個問題呢,我們可以這麼想。耗時的我們都扔給非同步去做,做好了再通知下我們做完了,我們拿到資料繼續往下走。

var xhr = new XMLHttpRequest();

    xhr.open('POST', url, true);   //第三個引數決定是否採用非同步的方式

    xhr.send(data);

    xhr.onreadystatechange = function(){

        if(xhr.readystate === 4 && xhr.status === 200){

                ///xxxx

        }

    }

上面是一個程式碼,瀏覽器在發起一個ajax請求,會單開一個執行緒去發起http請求,這樣的話就能把這個耗時的過程單獨去自己跑了,在這個執行緒的請求過程中,readystate 的值會有個變化的過程,每一次變化就觸發一次onreadystatechange 函式,進行判斷是否正確拿到返回結果。

 

來自: https://segmentfault.com/a/1190000007227305