JS的非同步程式設計

2021-10-09 13:57:06 字數 3052 閱讀 7920

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 =>).

then

( res=>).

catch

(err)

p.

then

(data =>

, err =>

)

let p =

newpromise

((resolve, reject)

=>

else},

2000);

}); p.

then

((data)

=>

,(err)

=>

);

p.

then

((data)

=>).

catch

((err)

=>

);

let promise1 =

newpromise

(function

(resolve, reject)

)let promise2 =

newpromise

(function

(resolve, reject)

)let promise3 =

newpromise

(function

(resolve, reject)

)let p = promise.

all(

[promise1, promise2, promise3])

p.then

(funciton()

,function()

)

//請求某個資源

function

requestimg()

img.src =

'的路徑';}

);return p;

}//延時函式,用於給請求計時

function

timeout()

,5000);

});return p;

} promise.

race([

requestimg()

,timeout()

]).then

((data)

=>).

catch

((err)

=>

);

let k =

tell()

; console.

log(k.

next()

);// console.

log(k.

next()

);// console.

log(k.

next()

);// console.

log(k.

next()

);//}

functiona(

))})

}functionb(

))}function

*grendome()

)}let gren =

grendome()

;// console.log(gren.next())

// // console.log(gren.next())

// // console.log(gren.next())

// // console.log(gren.next())

// gren.

next()

.value.

then

((res)

=>

)gren.

next()

.value.

then

((res)

=>

)gren.

next()

.value.

then

((res)

=>

)// 輸出結果

// a

// b

// grendome內部

function

sleep

(time)

, time);}

);}async

function

test()

}test

()

let

test

=function()

});return ret;}(

);// generator 自執行器

function

_asynctogenerator

(genfn)

;try

catch

(error)if

(info.done)

else

,(error)

=>);

}}step

('next');

});}

文章參考:

什麼是promise,我們用它來做什麼?

js為什麼說async/await是generator的語法糖詳解

generator和async/await

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

js語言的執行環境是 單執行緒 所謂單執行緒,就是乙個時間只能完成乙個任務,如果有多個任務,就必須排隊。單執行緒 的壞處是 只要有乙個任務耗時很長,後面的任務就必須排隊等待,會拖延整個程式的執行。為了解決這個問題,js的任務執行模式分為兩種 同步 synchronous 和非同步 asynchron...

JS非同步程式設計之Generator

前言 es6 中提出乙個叫生成器 generator 的概念,執行生成器函式,會返回迭代器物件 iterator 這個迭代器物件可以遍歷函式內部的每乙個狀態。function helloworldgenerator 通過執行生成器返回迭代器物件 var helloworlditerator hell...

JS 同步與非同步程式設計

js是單執行緒的,js就是個傻子,腦子一根筋,做著當前的這件事情,沒有完成之前絕不會做下一件事情 同步上一件事情沒有完成,繼續處理上一件事情,只有上一件事情完成了,才會做另一件事情 js中大部分都是同步程式設計的 for var i 0 i 10000 i console.log ok 迴圈結束了 ...