JS中的非同步程式設計方法

2022-08-30 03:42:06 字數 1264 閱讀 2377

js語言的執行環境是「單執行緒」。所謂單執行緒,就是乙個時間只能完成乙個任務,如果有多個任務,就必須排隊。

「單執行緒」的壞處是:只要有乙個任務耗時很長,後面的任務就必須排隊等待,會拖延整個程式的執行。

為了解決這個問題,js的任務執行模式分為兩種:同步(synchronous)和非同步(asynchronous)。

同步模式就是上面提到的,後面的任務等待前面的任務完成後,才能執行。程式執行順序和程式排列順序一致。

非同步模式,每乙個任務都有乙個或者多個**函式,前一任務完成,先是執行**函式。

一,**函式

給耗時長的函式新增**函式,這個**函式是原本這個任務執行完成之後要執行的函式,來達到避免後續函式執行被前面的函式阻塞;

//f1函式是乙個耗時的任務 

function f1(f2)

},1000);

f2();

}//f2函式用來改變背景顏色

function f2()

f1(f2);

這樣做,達到了f2函式不被f1函式長時間的執行所阻塞,而是把耗時的程式推遲執行。

二,promise物件

es6新特性promise,可以將非同步操作以同步操作的流程表達出來,避免層層巢狀的**函式。

var promise = new promise(function(resolve,reject)else 

});//.then方法

promise.then(

function() ,

function()

);

new promise()建構函式接受乙個函式作為引數,這個函式又接受兩個引數分別為resolve和reject方法。如果非同步操作完成,就呼叫resolve方法將promise物件例項的狀態變為「成功」(從pending到resolved);如果非同步操作失敗,就用reject方法將promise物件例項的狀態變成失敗(從pending到rejected)。

。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 採用這種方式,我們把同步操作變成了非同步...