成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

理解javascript中異步編程Generator

williamwen1986 / 2178人閱讀

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

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

Generator的寫法更像是同步的語句,比promise更簡潔

獲取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 后面都沒有值
console.log(barG.next())  //{ value: undefined, done: true }

2.throw()方法

function* gen() {
    try {
        console.log("---")
        yield ;  //因為沒有返回值
    } 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");   //因為這個異常后面已經(jīng)沒有yield 所以直接走的調(diào)用的catch 打印的外部捕獲 b
} catch (e) { 
    console.log("外部捕獲", e);
}
Generatro不是一個構(gòu)造函數(shù),只是一個遍歷對象 所以里面的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)個贊,后續(xù)繼續(xù)更新...

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/93756.html

相關(guān)文章

  • Javascript異步編程

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

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

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

    shadowbook 評論0 收藏0
  • Javascript異步編程:Callback、Promise、Generator

    摘要:異步過程控制了解異步的意義之后,我們來對比目前主流幾種異步過程控制方法,探討一下異步編程的最佳實踐。結(jié)語希望本文對大家有點(diǎn)幫助,能更深刻的理解異步編程,能寫出更優(yōu)雅更高效的代碼。 同步和異步(Synchronous and Asynchronous) 了解javascript的同學(xué)想必對同步和異步的概念應(yīng)該都很熟悉了,如果還有不熟悉的同學(xué),我這里舉個形象的例子,比如我們早上起床后要干三...

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

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

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

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

    fizz 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<