js語言的執行環境是「單執行緒」。所謂單執行緒,就是乙個時間只能完成乙個任務,如果有多個任務,就必須排隊。
「單執行緒」的壞處是:只要有乙個任務耗時很長,後面的任務就必須排隊等待,會拖延整個程式的執行。
為了解決這個問題,js的任務執行模式分為兩種:同步(synchronous)和非同步(asynchronous)。
同步模式就是上面提到的,後面的任務等待前面的任務完成後,才能執行。程式執行順序和程式排列順序一致。
非同步模式,每乙個任務都有乙個或者多個**函式,前一任務完成,先是執行**函式。
一,**函式
給耗時長的函式新增**函式,這個**函式是原本這個任務執行完成之後要執行的函式,來達到避免後續函式執行被前面的函式阻塞;
//f1函式是乙個耗時的任務這樣做,達到了f2函式不被f1函式長時間的執行所阻塞,而是把耗時的程式推遲執行。function f1(f2)
},1000);
f2();
}//f2函式用來改變背景顏色
function f2()
f1(f2);
二,promise物件
es6新特性promise,可以將非同步操作以同步操作的流程表達出來,避免層層巢狀的**函式。
var promise = new promise(function(resolve,reject)elsenew promise()建構函式接受乙個函式作為引數,這個函式又接受兩個引數分別為resolve和reject方法。如果非同步操作完成,就呼叫resolve方法將promise物件例項的狀態變為「成功」(從pending到resolved);如果非同步操作失敗,就用reject方法將promise物件例項的狀態變成失敗(從pending到rejected)。});//.then方法
promise.then(
function() ,
function()
);
。then方法,分別給resolve方法和reject方法指定**函式。
三,事件監聽
給耗時長的函式繫結一事件,事件觸發後就執行後來的函式。
JS的非同步程式設計
generator非同步方案 async await語法糖 let url1 url1 url2 url2 ajax function getdata url,data error function err let url1 url1 url2 url2 getdata url1 then res ...
JS中的非同步
hello,日常更新的我 浪 回來了!js中有三座高山 非同步和單執行緒 作用域和閉包 原型原型鏈 今天 浪 的主題是js中的非同步和單執行緒的問題。主要從這三個方面入手 一 什麼是非同步 與同步作比較 二 前端使用非同步的場景 三 非同步和單執行緒 一 什麼是非同步 說非同步之前我們先了解一下同步...
JS實現非同步程式設計的4種方法
一 函式 這是非同步程式設計最基本的方法。假定有兩個函式f1和f2,後者等待前者的執行結果。f1 f2 如果f1是乙個很耗時的任務,可以考慮改寫f1,把f2寫成f1的 函式。function f1 callback 1000 執行 就變成下面這樣 f1 f2 採用這種方式,我們把同步操作變成了非同步...