国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

理解javascript中異步編程Generator

williamwen1986 / 2121人閱讀

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

Generator 是es6處理異步編程的一種方式,來看看和promise有什么不同
const myFirstPromise = new Promise((resolve, reject) => {
  //   resolve(someValue); // fulfilled
  // 或
  //   reject("failure reason"); // rejected
});
myFirstPromise.then(x=>x)  //獲取值
再來看看Generator函數 ,函數前面是一個* 然后是函數名, 函數體里面是用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.調用可以使用 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.擴展運算符

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

5.解構賦值

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("內部捕獲", e);  //走的是這里
    }
    yield console.log("end");
};

try {
    var g = gen();
    g.next()   //console.log("---")
    g.throw("a");  //先走了異常  內部捕獲 a  但是并不是yield 所以繼續走 打印end 
    g.throw("b");   //因為這個異常后面已經沒有yield 所以直接走的調用的catch 打印的外部捕獲 b
} catch (e) { 
    console.log("外部捕獲", e);
}
Generatro不是一個構造函數,只是一個遍歷對象 所以里面的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

每天進步一點,希望大家喜歡,也希望喜歡的朋友點個贊,后續繼續更新...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93756.html

相關文章

  • Javascript異步編程

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

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

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

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

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

    dadong 評論0 收藏0
  • JavascriptGenerator函數和yield關鍵字

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

    ZHAO_ 評論0 收藏0
  • 談談ES6前后的異步編程

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

    fizz 評論0 收藏0

發表評論

0條評論

williamwen1986

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<