Javascript ES6 生成器
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);
});
我正在研究 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);
});