Javascript 访问生成器最终导致阻塞
是否有方法访问生成器中finally块中迭代器的最终值Javascript 访问生成器最终导致阻塞,javascript,ecmascript-6,generator,finally,Javascript,Ecmascript 6,Generator,Finally,是否有方法访问生成器中finally块中迭代器的最终值 函数*生成器(){ 试一试{ let value1=收益率(1) let value2=收益率(2) }最后{ log(“结束,如何访问结果?(4)”) } } var迭代器=生成器() var result1=迭代器。下一步(1) var result2=iterator.return(4) 有没有办法访问finally中迭代器的最终值 发电机堵塞 是的,您可以简单地返回最终值: function* generator() { try
函数*生成器(){
试一试{
let value1=收益率(1)
let value2=收益率(2)
}最后{
log(“结束,如何访问结果?(4)”)
} }
var迭代器=生成器()
var result1=迭代器。下一步(1)
var result2=iterator.return(4)
有没有办法访问finally中迭代器的最终值
发电机堵塞
是的,您可以简单地返回
最终值:
function* generator() {
try {
var value1 = yield(1) // cannot use let here
var value2 = yield(2) // cannot use let here
console.log('never gets here');
} finally {
return [value1, value2];
}
}
var iterator = generator(),
result0 = iterator.next(), // starts the generator
result1 = iterator.next("a"), // "a" gets assigned to value1
result2 = iterator.return("b"); // "b" does not get assigned to value2
console.log(result0); // { value: 1, done: false }
console.log(result1); // { value: 2, done: false }
console.log(result2); // { value: [ 'a', undefined ], done: true }
.return(“b”)
可能导致result2
变成{value:'b',done:true}
。但是,在上述代码中,返回[value1,value2]会覆盖“b”
。这使您能够访问finally
块中的最终结果
无论是否覆盖
“b”
,它都不会传递给生成器本身进行处理,因此只能作为result2.value
(如果未覆盖)进行访问。否,无法访问传递给生成器内部.return()
的参数。它与try
块中的return
语句相同-您只能覆盖finally
子句中的返回值,但不能读取它。您不能在try
之外声明值吗?不,该值在迭代器之外确定。return(value)