Generator
Generator允許我們在函數執行過程中暫停,并在将來某一個時刻回複執行。改變例以往函數必須執行完成才傳回的特點。 整個 Generator 函數就是一個封裝的異步任務,或者說是異步任務的容器。異步操作需要暫停的地方,都用 yield 語句注明
function* example(){
yield ;
yield ;
yield ;
}
let iter=example();
iter.next();//{value: 1, done: false},傳回一個由yield表達式生成的值
iter.next();//{value: 2, done: false}
iter.next();//{value: 3, done: false}
iter.next();//{value: undefined, done: true}//生成器結束
let iter2=example();
iter2.return();//給定傳回值,并結束生成器{value: 75, done: true}
itet2.next();//{value: undefined, done: true}//生成器結束
let iter3=example();
iter3.return();//{value: undefined, done: true}//生成器結束
複制代碼
Generator.prototype.throw()//抛出異常
async await(Generator的文法糖)
async function
關鍵字用來在表達式中定義異步函數。
-
操作符用于等待一個await
對象。隻能在異步函數Promise
中使用。async function
-
傳回await
的操作對象的傳回結果-如果promise
正常處理,其回調函數resolve函數參數作為promise
表達式的值繼續執行await
,如果執行錯誤,await 表達式會把async function
的異常原因抛出,Promise
- 若果等待的不是
對象,則傳回該值本身promise
function resolveAfter2S(data){
return new Promise((res)=>{
setTimeout(()=>{
res(data)
},2000);
});
}
async function f1(){
let x=await resolveAfter2S(10);
let y=await 30;
console.log(y);//30
console.log(x);//10
}
f1()
複制代碼