blog
blog copied to clipboard
写给小盆友看的generator入门指南
剧本
时间
地点
野外,有一排
![]()
![]()
![]()
![]()
![]()
每棵树上都长了一颗![]()
观众:mmp,这是椰子树,你告诉我长了苹果?! 导演:我说是就是
出场人物
主角:
你
配角:
猴子
故事开始了
你看到了这排🌴,然后突然想吃树上的🍎,但你不会爬树啊
环绕四周一看,诶,远处有只猴子诶
你:猴子🐒,你能帮我把苹果摘下来么?
会说话的猴子:我为什么要帮你摘啊,你能给我什么?
你眉头一皱,挠了挠头
“我给你香蕉🍌可以么?”
会说话的猴子:成交了👌
function * G() {
const bananas = []
bananas[0] = yield 🍎
try {
bananas[1] = yield 🍏
} catch( 💩 ) {}
bananas[2] = yield 🍎
bananas[3] = yield 🍏
bananas[4] = yield 🍎
}
const gen = G()
你:去吧,皮卡猴
gen.next()
猴子跳到了第一棵树上,摘了苹果🍎给你
你尝了尝,诶哟,好像不错哦
于是你扔了一个香蕉🍌给猴子作为报酬
你:去吧,到下一棵树去
gen.next( 🍌 )
这时候猴子跳到了下一棵树上,并扔了苹果🍏过来
你拿到后尝了尝
你:![]()
麻蛋,这苹果没熟啊,你非常生气😤,随手抄起一个不明物体💩扔向了猴子
gen.throw( 💩 ) // 我扔...
结果没想到猴子早有准备,他接住,哦不,挡住了这个不明物体
猴子白了你一眼,又跳到下一棵树上,又扔了苹果🍎给你,“再尝尝这个”
你尝了尝,这次好像熟了
你:这次的苹果不错,再去下一棵树上吧
但这时你摸了摸口袋,突然发现香蕉没了,尴尬😓
于是你打电话给你妈,让你妈带了香蕉过来(异步)
香蕉又有了,继续
gen.next( 🍌 )
猴子接住香蕉,跳到了下一棵树上,扔了个苹果🍏给你
诶???怎么又是生的,这次你又怒了
又抄起不明物体扔了过去,这次猴子没准备好(try...catch...),直接被你砸懵逼了
gen.throw( 💩 ) // 再扔...
猴子:我不干了!!!
你:...
你:继续嘛 猴子:不干
gen.next() // { done: true: value: undefined }
你:继续嘛 猴子:不干
gen.next() // { done: true: value: undefined }
小盆友们,看完之后你知道为什么generator在其他语言里面叫做协程了么?
![]()
666
跟着楼上,999