Javascript ES6 Generators
Javascript ES6 Generators
我正在深入研究javascript生成器,我真的很困惑。
我正在使用node@0.11.x
来运行此示例:
function find() {
process.nextTick(function() {
it.next(1);
});
};
var it = (function* main() {
var k = yield find();
console.log(k);
})();
it.next();
有没有办法获取生成器内部next
函数的引用?
像这样:
function find(next) {
process.nextTick(function() {
next(1);
});
};
(function* main() {
var k = yield find(this.next);
console.log(k);
})().next();
要直接回答您的问题,您不能,因为生成器函数内部this
不是生成器实例,而是函数调用的上下文。你可以做:
function find(next) {
process.nextTick(function() {
next(1);
});
};
var it = (function* main() {
var k = yield find(it.next.bind(it));
console.log(k);
})();
it.next();
但这很难理解。通常,这将通过像 co
这样的协程库来完成。这样,您将yield
一个承诺,当承诺被解决时,co
将调用.next
,其中包含承诺解决的值。
var co = require('co');
function find(){
return new Promise(function(resolve){
process.nextTick(function(){
resolve(1);
});
});
}
co(function * (){
var k = yield find();
console.log(k);
});
相关文章:
- ES6构造函数返回基类的实例
- 如何在下面的ES6循环中获得前面的文本
- es6 相当于下划线查找位置
- 如何在Javascript/ES6中的Aurelia浏览器应用程序中使用AWS S3
- ES6生成器:.next()的输入值
- 简单的ES6承诺问题-交换解决和拒绝参数
- 映射数组ES6时考虑空值
- @@(“at at”)在ES6 JavaScript中是什么意思
- 在ES6中,模块将导致多个网络调用,因为两个模块不能在单个文件中定义
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- 使用Ember-cli项目中的ES6库
- JShint-.jshintrc中的ES6有esversion,但仍收到警告(使用atom)
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- Unexpected Transpile ES6>ES5
- 可以合并或嵌套ES6导入
- ES6 模板文字是否比 eval 更安全
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 数组值的排序以匹配另一个数组ES6
- Javascript ES6 Generators
- 在node.js中迭代大量的异步调用/结果(使用ES6 / async / bluebird / generators)