【发布时间】:2017-03-22 22:48:55
【问题描述】:
我正在阅读以下blog。
他们在博客中有代码:
function request(url) {
// this is where we're hiding the asynchronicity,
// away from the main code of our generator
// `it.next(..)` is the generator's iterator-resume
// call
makeAjaxCall( url, function(response){
it.next( response );
} );
// Note: nothing returned here!
}
代码看起来很简单。但是在makeAjaxCall 回调中,他们有一个名为it.next(response) 的行。这是什么it?我知道他们说它来自生成器,但我没有看到它在任何地方传递!
但他们这样做:
function *main() {
var result1 = yield request( "http://some.url.1" );
var data = JSON.parse( result1 );
var result2 = yield request( "http://some.url.2?id=" + data.id );
var resp = JSON.parse( result2 );
console.log( "The value you asked for: " + resp.value );
}
这行怎么来的:
var result1 = yield request( "http://some.url.1" );
如果it 在request 函数中未定义,是否有效?
【问题讨论】:
-
它是
Iterator。您必须在其他地方定义它 -
// it.next(..) is the generator's iterator-resume // call所以it is the generator's iterator -
it在完全相同的代码块中定义。var it = main(); -
@batman,你find it了吗?
标签: javascript ecmascript-6 generator