ES6 generator函數(shù)

generator-生成器

genrat-生成

普通函數(shù)——一路到底

generator函數(shù)——中間能停

本質(zhì)上是將其一個(gè)函數(shù)切割成幾個(gè)小型函數(shù),然后通過next請求執(zhí)行

generator標(biāo)志*,即:function *show(){}

yield;//暫時(shí)放棄執(zhí)行

function *show(){

alert("A")

yield;//暫時(shí)放棄執(zhí)行

alert("B")

}

let genObj=show();

genObj.next();

genObj.next();

yield:既可以傳遞參數(shù)

function *show(num1 ,num2){

alert("A")

alert(`${num1},${num2}`) //100,444

let a = yield;//暫時(shí)放棄執(zhí)行

alert("B")

alert(a); //11

}

let gen = show(100,444);

gen.next(12);//第一個(gè).next沒辦法給yield傳參

gen.next(11);

yield又可以返回值

function *show(){

alert("aaa");

yield 1222;

alert("bbbbb");

return 55;

}

let gen = show();

let re1 = gen.next();

console.log(re1); //{value: 1222, done: false}

let re2 = gen.next();

console.log(re2); //{value: 55, done: true}


generator 實(shí)例

generator 好處就像寫同步操作一樣寫異步操作

runner(function *(){

let data1 = yield $.ajax({url:'1.txt',dataType:'json '});

let data2 = yield $.ajax({url:'2.txt',dataType:'json'});

let data3 = yield $.ajax({url:'3.txt',dataType:'json'});

console.log(data1,data2,data3);

})

異步操作:

1.回調(diào)

2.Promise

3.generator

//回調(diào)

$.ajax({

url:xxx,

dataType:'json;,

success(data1){

$.ajax({

????????url:xxx,

????????dataType:'json;,

????????success(data2){

????????$.ajax({

????????????url:xxx,

????????????dataType:'json;,

????????????success(data3){

????????????????//完事

????????????},

????????????error(){

????????????????alert("錯(cuò)了")

????????????}

????????})

????},

????error(){

????????alert("錯(cuò)了")

????}

????})

????},

????error(){

????????alert("錯(cuò)了")

????}

})

//Promise

Promise.all([

????????$.ajax({url:"xxx",dataType:"json"}),

????????$.ajax({url:"xxx",dataType:"json"}),

????????$.ajax({url:"xxx",dataType:"json"}),

????????$.ajax({url:"xxx",dataType:"json"}),

]).then(result=>{

//完事

},err=>{

alert('錯(cuò)了')

});

//generator適合摻雜一些邏輯

runner(function *(){

????????let data1=$.ajax({url:"xxx",dataType:"json"}),

????????let data2=$.ajax({url:"xxx",dataType:"json"}),

????????let data3=$.ajax({url:"xxx",dataType:"json"}),

????????let data4=$.ajax({url:"xxx",dataType:"json"}),

//完事

})

帶邏輯-普通函數(shù)

$.ajax({

????????url:”getUserData“,

????????dataType:"json",

????????success(results){

????????let userData=results[0];

????????if(userData.type=="VIP“){

$.ajax({

????url:'getVIPItems',

????dataType:'json',

????success(items){

????//處理一些事情,生成列表。顯示等

},error(){

????alert('報(bào)錯(cuò)了。。')

}

})

}else{

$.ajax({

????url:'getItems',

????dataType:'json',

????success(items){

????//處理一些事情

},error(){

????alert('報(bào)錯(cuò)了。。')

}

})

}

},

error(){

????alert("出錯(cuò)了。。。。“)

}

})


帶邏輯-Promise

Promise.all({

$.ajax({url:'getUserData',dataType:'json'})

}).then(result=>{

let userData=results[0];

if(userData.type=="VIP“){

$.ajax({

url:'getVIPItems',

dataType:'json',

success(items){

//處理一些事情

},error(){

alert('報(bào)錯(cuò)了。。')

}

})

} else{

$.ajax({

url:'getItems',

dataType:'json',

success(items){

//處理一些事情

},error(){

alert('報(bào)錯(cuò)了。。')

}

})

}

},err=>{

allert('失敗‘);

})

帶邏輯-generator

不能寫成箭頭形式

runner(funciton *(){

let userData=yield $.ajax({

url:"getUserData",

dataType:"json",

});

if(userData.type=='VIP'){

let items = yield $.ajax({

url:"getVIPItems",

dataType:"json",

});

}else{

let items = yield $.ajax({

url:"getItems",

dataType:"json",

});

}

//做一些其他的事情。。。。

});

Promise——適合一次讀一堆

generator——帶邏輯性

generator——KOA

*nodejs

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文作者就是我,簡書的microkof。如果您覺得本文對您的工作有意義,產(chǎn)生了不可估量的價(jià)值,那么請您不吝打賞我,...
    microkof閱讀 23,852評論 16 78
  • 簡介 Generator函數(shù)是一個(gè)函數(shù)的內(nèi)部狀態(tài)的遍歷器,也就是說,Generator函數(shù)是一個(gè)狀態(tài)機(jī) 特征 fu...
    打不過就加入他閱讀 230評論 0 0
  • 1.基本概念 Generator 函數(shù)是 ES6 提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同。本章詳細(xì)...
    lhdoeo閱讀 412評論 0 1
  • Generator 是一種異步函數(shù)解決方案;語法和傳統(tǒng)的方法完全不相同;Generator有多種解釋;首先可以把它...
    吳高亮閱讀 324評論 0 0
  • Generator 函數(shù)是 ES6 提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同 Generator 函...
    SunshineBrother閱讀 788評論 0 0

友情鏈接更多精彩內(nèi)容