为js中yield赋能

为js中yield赋能
最新回答
浮世

2023-05-22 19:51:24

yield是JavaScript中的关键字,用于生成ES6中的Generator。当在function后或前加*,函数返回值即为Generator,称为Generator函数。Generator函数允许你只运行函数的一部分,剩余部分由使用者控制继续执行。

在Generator函数中,done为false表示函数未运行完毕,value表示yield中的值。再次调用next()会运行到下一个yield之处。最后运行到return之处,done为true,value是return的返回值。

Generator的强大之处在于能给learn函数.next()传递参数,这个参数能作为yield的返回值(需动手实验)。此功能使参数能控制"a"到变量a的转换。用yield取出异步返回值,使Generator函数看起来如同同步操作,非常实用。

假设我们有HTTP接口函数http.get(url) -> Promise JSON Error,传递url返回Promise。runMyPromise函数取出Promise中的data,通过Generator特性赋值给mylogic函数中的data,让mylogic函数的异步调用像同步代码一样简单。

为了给yield赋能,通过yield关键字,我们可以控制yield后面的表达式和yield前面赋值的关系。实现的功能包括从Promise中取出数据、从Generator函数中获取返回值、直接返回其他值或退出运行返回Nothing。这些代码无需经过babel,可以直接在chrome repl中运行。

需要注意的是,Promise JSON Error是指Promise类型.then()取出的类型为JSON,.catch()取出的类型为Error。