亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

理解javascript中異步編程Generator

williamwen1986 / 2175人閱讀

摘要:是處理異步編程的一種方式,來(lái)看看和有什么不同或獲取值再來(lái)看看函數(shù),函數(shù)前面是一個(gè)然后是函數(shù)名,函數(shù)體里面是用代表但是可以返回多次使用即不處理后面的返回的是一個(gè)對(duì)象的寫(xiě)法更像是同步的語(yǔ)句,比更簡(jiǎn)潔獲取值的幾種方式調(diào)用可以使用獲取值表示為最后一

Generator 是es6處理異步編程的一種方式,來(lái)看看和promise有什么不同
const myFirstPromise = new Promise((resolve, reject) => {
  //   resolve(someValue); // fulfilled
  // 或
  //   reject("failure reason"); // rejected
});
myFirstPromise.then(x=>x)  //獲取值
再來(lái)看看Generator函數(shù) ,函數(shù)前面是一個(gè)* 然后是函數(shù)名, 函數(shù)體里面是用yield代表return 但是可以返回多次
function* gen(){   
    yield 1
    yield 2
    return "return"  //使用return 即不處理后面的yield
}
let b=gen();
console.log(b);  //{}  返回的是一個(gè)generator對(duì)象 
console.log(b.next()) //{ value: 1, done: false }  

Generator的寫(xiě)法更像是同步的語(yǔ)句,比promise更簡(jiǎn)潔

獲取generator值的幾種方式

1.調(diào)用可以使用 next()獲取值

console.log(b.next()) //{ value: 1, done: false }  
console.log(b.next()) //{ value: 2, done: false }
console.log(b.next()) //{ value: "return", done: true }  done==true表示為最后一步
function* foo(){
    yield "a"
    yield "b"
    yield "c"
}

2.也可以使用for...of 獲取值

let f=foo();
for(let a of f ){
    console.log(a,"------")  
}

3.Array.from

console.log(Array.from(foo()),"-----from") //[ "a", "b", "c" ] "-----from"

4.擴(kuò)展運(yùn)算符

console.log([...foo()]);  //[ "a", "b", "c" ]

5.解構(gòu)賦值

let [x,y]=foo();
console.log(x,"----x") //a
介紹下generatr常用的一些方法,next,return,throw

1.return 方法

function* bar(a,b){
    yield "1"
    yield "2"
    yield "3"
};

var barG=bar();
console.log(barG.next())  //{ value: 3, done: false }
console.log(barG.return("foo"))  //{ value: "foo", done: true } //return 后面都沒(méi)有值
console.log(barG.next())  //{ value: undefined, done: true }

2.throw()方法

function* gen() {
    try {
        console.log("---")
        yield ;  //因?yàn)闆](méi)有返回值
    } catch (e) {
        console.log("內(nèi)部捕獲", e);  //走的是這里
    }
    yield console.log("end");
};

try {
    var g = gen();
    g.next()   //console.log("---")
    g.throw("a");  //先走了異常  內(nèi)部捕獲 a  但是并不是yield 所以繼續(xù)走 打印end 
    g.throw("b");   //因?yàn)檫@個(gè)異常后面已經(jīng)沒(méi)有yield 所以直接走的調(diào)用的catch 打印的外部捕獲 b
} catch (e) { 
    console.log("外部捕獲", e);
}
Generatro不是一個(gè)構(gòu)造函數(shù),只是一個(gè)遍歷對(duì)象 所以里面的this都是指向window,下面看看例子
function* gener(){
    yield this.name=1;
}
console.log(gener().next()); //{ value: 1, done: false }
console.log(gener().name)   //undefined
console.log(window.name) //1

每天進(jìn)步一點(diǎn),希望大家喜歡,也希望喜歡的朋友點(diǎn)個(gè)贊,后續(xù)繼續(xù)更新...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/93756.html

相關(guān)文章

  • Javascript異步編程

    摘要:接下來(lái),我們一起來(lái)看看中的異步編程,具體有哪幾種。實(shí)現(xiàn)異步編程的方法一回調(diào)函數(shù)上面不止一次提到了回調(diào)函數(shù)。它是異步編程中,最基本的方法。四對(duì)象接下來(lái),我們聊聊與相關(guān)的異步編程方法,對(duì)象。 showImg(https://segmentfault.com/img/bVbneWy?w=1600&h=1200); 前言 最近,小伙伴S 問(wèn)了我一段代碼: const funB = (value...

    wemall 評(píng)論0 收藏0
  • 夯實(shí)基礎(chǔ)-JavaScript異步編程

    摘要:調(diào)用棧被清空,消息隊(duì)列中并無(wú)任務(wù),線程停止,事件循環(huán)結(jié)束。不確定的時(shí)間點(diǎn)請(qǐng)求返回,將設(shè)定好的回調(diào)函數(shù)放入消息隊(duì)列。調(diào)用棧執(zhí)行完畢執(zhí)行消息隊(duì)列任務(wù)。請(qǐng)求并發(fā)回調(diào)函數(shù)執(zhí)行順序無(wú)法確定。 異步編程 JavaScript中異步編程問(wèn)題可以說(shuō)是基礎(chǔ)中的重點(diǎn),也是比較難理解的地方。首先要弄懂的是什么叫異步? 我們的代碼在執(zhí)行的時(shí)候是從上到下按順序執(zhí)行,一段代碼執(zhí)行了之后才會(huì)執(zhí)行下一段代碼,這種方式...

    shadowbook 評(píng)論0 收藏0
  • Javascript異步編程:Callback、Promise、Generator

    摘要:異步過(guò)程控制了解異步的意義之后,我們來(lái)對(duì)比目前主流幾種異步過(guò)程控制方法,探討一下異步編程的最佳實(shí)踐。結(jié)語(yǔ)希望本文對(duì)大家有點(diǎn)幫助,能更深刻的理解異步編程,能寫(xiě)出更優(yōu)雅更高效的代碼。 同步和異步(Synchronous and Asynchronous) 了解javascript的同學(xué)想必對(duì)同步和異步的概念應(yīng)該都很熟悉了,如果還有不熟悉的同學(xué),我這里舉個(gè)形象的例子,比如我們?cè)缟掀鸫埠笠扇?..

    dadong 評(píng)論0 收藏0
  • JavascriptGenerator函數(shù)和yield關(guān)鍵字

    摘要:序在中,大家討論的最多的就是異步編程的操作,如何避免回調(diào)的多次嵌套。今天所講的和就是和異步編程有關(guān),可以幫助我們把異步編程同步化。然而這樣的方法依然需要依賴外在的庫(kù)函數(shù),于是中提出了和關(guān)鍵字。 序 在Javascript中,大家討論的最多的就是異步編程的操作,如何避免回調(diào)的多次嵌套。異步操作的回調(diào)一旦嵌套很多,不僅代碼會(huì)變的臃腫,還很容易出錯(cuò)。各種各樣的異步編程解決方案也被不斷提出,例...

    ZHAO_ 評(píng)論0 收藏0
  • 談?wù)凟S6前后的異步編程

    摘要:回調(diào)函數(shù)這是異步編程最基本的方法。對(duì)象對(duì)象是工作組提出的一種規(guī)范,目的是為異步編程提供統(tǒng)一接口。誕生后,出現(xiàn)了函數(shù),它將異步編程帶入了一個(gè)全新的階段。 更多詳情點(diǎn)擊http://blog.zhangbing.club/Ja... Javascript 語(yǔ)言的執(zhí)行環(huán)境是單線程的,如果沒(méi)有異步編程,根本沒(méi)法用,非卡死不可。 為了解決這個(gè)問(wèn)題,Javascript語(yǔ)言將任務(wù)的執(zhí)行模式分成兩種...

    fizz 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<