js的三種非同步處理

2022-07-18 03:09:11 字數 1566 閱讀 2463

promise 物件

//es6 規定,promise物件是乙個建構函式,用來生成promise例項。

const p = new promise(function(resolve,reject)else

})p.then(function (res) ,function (err) )

p.catch(function (err) )

p.finally(function())

promise.all

const p = promise.all([p1, p2, p3])
p的狀態由p1、p2、p3決定,分成兩種情況。

(1)只有p1、p2、p3的狀態都變成fulfilled,p的狀態才會變成fulfilled,此時p1、p2、p3的返回值組成乙個陣列,傳遞給p的**函式。

(2)只要p1、p2、p3之中有乙個被rejected,p的狀態就變成rejected,此時第乙個被reject的例項的返回值,會傳遞給p的**函式。

generator 函式

function* hellogenerator() 

let hw = hellogenerator();

hw.next()//

hw.next()//

hw.next()//

hw.next()//

async 函式

function get1(),2000)})}

async function getset()

getset().then(console.log)

async函式返回的 promise 物件,必須等到內部所有await命令後面的 promise 物件執行完,才會發生狀態改變,如果任何乙個await語句後面的 promise 物件變為reject狀態或遇到return,那麼整個async函式都會中斷執行。

另外需要注意的是, await 在等待 promise 物件時會導致 async function 暫停執行, 一直到 promise 物件決議之後才會 async function 繼續執行.

如果我們希望即使前乙個非同步操作失敗,也不要中斷後面的非同步操作。這時可以將第乙個await放在try...catch結構裡面,這樣不管這個非同步操作是否成功,第二個await都會執行。

async function f()  catch(e) 

return await promise.resolve('hello world');

}f().then(v => console.log(v))

補充

//此處省略getfoo(), getbar()兩個函式

// 寫法一

async function getset()

// 寫法二

async function getset()

*文章參考ecmascript 6 入門 *

JS非同步載入的三種方式

我們平時使用的最多的一種方式。同步模式,又稱阻塞模式,會阻止瀏覽器的後續處理,停止後續的解析,只有當當前載入完成,才能進行下一步操作。所以預設同步執行才是安全的。但這樣如果js中有輸出document內容 修改dom 重定向等行為,就會造成頁面堵塞。所以一般建議把 firefox 3.6 opera...

JS非同步載入的三種方式

我們平時使用的最多的一種方式。同步模式,又稱阻塞模式,會阻止瀏覽器的後續處理,停止後續的解析,只有當當前載入完成,才能進行下一步操作。所以預設同步執行才是安全的。但這樣如果js中有輸出document內容 修改dom 重定向等行為,就會造成頁面堵塞。所以一般建議把 firefox 3.6 opera...

js非同步載入的三種方式

預設情況j ascript是同步載入的,也就是j ascript的載入是阻塞的,後面的元素要等待j ascript載入完畢後才能進行再載入,對於一些意義不是很大的j ascript,如果放在頁頭會導致載入很慢的話,是會嚴重影響使用者體驗的。1 defer,只支援ie defer屬性的定義和用法 de...