Javascript 访问生成器最终导致阻塞

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

是否有方法访问生成器中finally块中迭代器的最终值

函数*生成器(){
试一试{
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)