ECMAScript 非同步程式設計 Generator

2021-10-10 19:49:33 字數 2187 閱讀 7783

一、ecmascript-非同步程式設計-generator

1. generator的定義

// *符號 

function

*generator()

2. generator的輸出yield和執行next
function

*foo()

}let f =

foo();

// 這邊返回的是乙個generator迭代器

console.

log(f.

next()

)// 通過手動的去執行 一次next只會執行一次

注意:yield 關鍵字不能在建構函式中使用,只能在generator函式中使用。

// 這種就是有問題的

function

*gen

(args));

}// 注意 每次next的引數是上一次yield的返回值

function

*gen

(x)let g =

gen(5)

console.

log(g.

next()

)// 6 這邊就是5+1的返回值

console.

log(g.

next()

)// nan 因為這邊next的引數未傳,所以認為yield(x + 1)的返回值是undefined, 2 * undefined結果nan,nan/3也是nan 所以輸出結果為nan

console.

log(g.

next()

)// nan x+y+z 同樣也是nan

let g =

gen(5)

console.

log(g.

next()

)// 6 這邊就是5+1的返回值

console.

log(g.

next(15

))// 10 y=30 因為這邊next的引數傳入15,所以認為yield(x + 1)的返回值是15, 2 * 15結果30,30/3 所以輸出結果為10

console.

log(g.

next(16

))// 51 yield(y / 3)為16 y=30 x=5 所以為51

// 用法:比如每呼叫一次該函式,這個函式遇到是9或者9的倍數進行一次的輸出

function

*count

(x=1

) x++}}

let n =

count()

console.

log(n.

next()

.value)

// 9

console.

log(n.

next()

.value)

// 18

console.

log(n.

next()

.value)

// 27

console.

log(n.

next()

.value)

// 36

console.

log(n.

next()

.value)

// 45

// 注意:如果沒有generator那while裡面將是乙個死迴圈。

3. 傳送非同步請求
// 舉例:依次請求a、b、c

function

ajax

(url, callback)

else

// 2. 傳送請求

// 3. 服務端響應

// 呼叫

let getdata =

gen(

)getdata.

next

()

Socket非同步程式設計

以 socket 通訊中的非同步方法為例 public static manualresetevent connectdone new manualresetevent false public static void connectcallback iasyncresult ar sclient....

C 非同步程式設計

同步方法和非同步方法的區別 同步方法呼叫在程式繼續執行之前需要等待同步方法執行完畢返回結果 非同步方法則在被呼叫之後立即返回以便程式在被呼叫方法完成其任務的同時執行其它操作 非同步程式設計概覽 net framework 允許您非同步呼叫任何方法。定義與您需要呼叫的方法具有相同簽名的委託 公共語言執...

非同步程式設計Demo

static int takesawhile int data,int ms public delegate int takesawhiledelegate int data,int ms 委託可以直接非同步進行 begininvoke 而不用再開執行緒 thread 實質是一樣的 takesawh...