也就是说,我怎么表达
function *(next) {}
用箭头语法?我已经尝试了所有我能想到的组合,但我找不到任何关于它的文档。
(我目前使用的是Node.js v0.11.14。)
也就是说,我怎么表达
function *(next) {}
用箭头语法?我已经尝试了所有我能想到的组合,但我找不到任何关于它的文档。
(我目前使用的是Node.js v0.11.14。)
当前回答
你可以,但不是用好的方式。它不短,看起来也不漂亮。看看这个:
function* iterable(arg) {
yield* [];
}
async function* asyncIterable(arg) {
yield* [];
}
const arrowIterable = arg => {
return {
*[Symbol.iterator]() {
yield* [];
},
};
};
const arrowAsyncIterable = arg => {
return {
async *[Symbol.asyncIterator]() {
yield* [];
},
};
};
这是可行的,因为iterable基本上是一个带有Symbol的对象。迭代器或符号。asyncIterator设置为一个迭代器。生成器是迭代器!
享受吧!
其他回答
你可以,但不是用好的方式。它不短,看起来也不漂亮。看看这个:
function* iterable(arg) {
yield* [];
}
async function* asyncIterable(arg) {
yield* [];
}
const arrowIterable = arg => {
return {
*[Symbol.iterator]() {
yield* [];
},
};
};
const arrowAsyncIterable = arg => {
return {
async *[Symbol.asyncIterator]() {
yield* [];
},
};
};
这是可行的,因为iterable基本上是一个带有Symbol的对象。迭代器或符号。asyncIterator设置为一个迭代器。生成器是迭代器!
享受吧!
现在还不能,但将来可能会,因为TC39将于2019年10月发布相同的版本,目前处于第一阶段。
I know that this is very late, but another possible reason could be syntax. maybe (*() => {}) works, but what about (9 ** () => {})? Is that 9 to the power of an arrow function, returning NaN, or is it 9 times a generator arrow function, also returning NaN? It could be done with some alternative syntax, like =>* as mentioned by another answer here, but maybe there was a desire to preserve the consistency of the generator function syntax (eg. function* () {} and { *genMethod() {} }) when it was being implemented. Not too much of an excuse, but a reason for it.
redux-saga有一个很好的解决方案
import { call, all } from 'redux-saga/effects';
function* gen() {
yield all([].map(() => {
return call(....);
}));
}
除了上面提到的esdiscuss.org上的讨论和Ecma TC39委员会2013年11月的ES6会议记录之外,发电机箭头在2016年9月的两次ES7会议[1][2]中被重新讨论。在讨论了各种语法的优缺点(主要是=*>和=>*)以及缺乏该功能的理由和用例之后,他们得出了这样的结论:
委员会对此有一些兴趣,但担心该特性在添加新语法方面没有发挥应有的作用 计划在第三天重新审视=>*,看看我们能不能至少把它带到阶段0,这是Domenic Denicola的异步迭代提议的一部分
发电机箭头的提议被移到第一阶段,Brendan Eich和Domenic Denicola作为冠军。上述异步迭代已于2018年完成并实现。
2019年10月,谢尔盖·鲁巴诺夫(Sergey Rubanov)的官方回购版出现了更多关于语法和其他细节的讨论。