摘要:是處理異步編程的一種方式,來看看和有什么不同或獲取值再來看看函數(shù),函數(shù)前面是一個(gè)然后是函數(shù)名,函數(shù)體里面是用代表但是可以返回多次使用即不處理后面的返回的是一個(gè)對象的寫法更像是同步的語句,比更簡潔獲取值的幾種方式調(diào)用可以使用獲取值表示為最后一
const myFirstPromise = new Promise((resolve, reject) => { // resolve(someValue); // fulfilled // 或 // reject("failure reason"); // rejected }); myFirstPromise.then(x=>x) //獲取值
function* gen(){ yield 1 yield 2 return "return" //使用return 即不處理后面的yield } let b=gen(); console.log(b); //{} 返回的是一個(gè)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
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 ; //因?yàn)闆]有返回值 } 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)沒有yield 所以直接走的調(diào)用的catch 打印的外部捕獲 b } catch (e) { console.log("外部捕獲", e); }
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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/93756.html
摘要:接下來,我們一起來看看中的異步編程,具體有哪幾種。實(shí)現(xiàn)異步編程的方法一回調(diào)函數(shù)上面不止一次提到了回調(diào)函數(shù)。它是異步編程中,最基本的方法。四對象接下來,我們聊聊與相關(guān)的異步編程方法,對象。 showImg(https://segmentfault.com/img/bVbneWy?w=1600&h=1200); 前言 最近,小伙伴S 問了我一段代碼: const funB = (value...
摘要:調(diào)用棧被清空,消息隊(duì)列中并無任務(wù),線程停止,事件循環(huán)結(jié)束。不確定的時(shí)間點(diǎn)請求返回,將設(shè)定好的回調(diào)函數(shù)放入消息隊(duì)列。調(diào)用棧執(zhí)行完畢執(zhí)行消息隊(duì)列任務(wù)。請求并發(fā)回調(diào)函數(shù)執(zhí)行順序無法確定。 異步編程 JavaScript中異步編程問題可以說是基礎(chǔ)中的重點(diǎn),也是比較難理解的地方。首先要弄懂的是什么叫異步? 我們的代碼在執(zhí)行的時(shí)候是從上到下按順序執(zhí)行,一段代碼執(zhí)行了之后才會執(zhí)行下一段代碼,這種方式...
摘要:異步過程控制了解異步的意義之后,我們來對比目前主流幾種異步過程控制方法,探討一下異步編程的最佳實(shí)踐。結(jié)語希望本文對大家有點(diǎn)幫助,能更深刻的理解異步編程,能寫出更優(yōu)雅更高效的代碼。 同步和異步(Synchronous and Asynchronous) 了解javascript的同學(xué)想必對同步和異步的概念應(yīng)該都很熟悉了,如果還有不熟悉的同學(xué),我這里舉個(gè)形象的例子,比如我們早上起床后要干三...
摘要:序在中,大家討論的最多的就是異步編程的操作,如何避免回調(diào)的多次嵌套。今天所講的和就是和異步編程有關(guān),可以幫助我們把異步編程同步化。然而這樣的方法依然需要依賴外在的庫函數(shù),于是中提出了和關(guān)鍵字。 序 在Javascript中,大家討論的最多的就是異步編程的操作,如何避免回調(diào)的多次嵌套。異步操作的回調(diào)一旦嵌套很多,不僅代碼會變的臃腫,還很容易出錯(cuò)。各種各樣的異步編程解決方案也被不斷提出,例...
摘要:回調(diào)函數(shù)這是異步編程最基本的方法。對象對象是工作組提出的一種規(guī)范,目的是為異步編程提供統(tǒng)一接口。誕生后,出現(xiàn)了函數(shù),它將異步編程帶入了一個(gè)全新的階段。 更多詳情點(diǎn)擊http://blog.zhangbing.club/Ja... Javascript 語言的執(zhí)行環(huán)境是單線程的,如果沒有異步編程,根本沒法用,非卡死不可。 為了解決這個(gè)問題,Javascript語言將任務(wù)的執(zhí)行模式分成兩種...
閱讀 2301·2021-10-09 09:41
閱讀 1754·2019-08-30 15:53
閱讀 999·2019-08-30 15:52
閱讀 3451·2019-08-30 11:26
閱讀 778·2019-08-29 16:09
閱讀 3434·2019-08-29 13:25
閱讀 2269·2019-08-26 16:45
閱讀 1939·2019-08-26 11:51