Generator返回的对象有一个throw方法,可以从外部调用,然后内部捕捉,不过有些问题还是会比较迷惑,一起来看看:

请问上面输出的是inside error还是out error呢?

答案是out error,为什么呢?不是说throw方法是先被内部捕捉吗?

其实答案很简单,因为调用throw的时候,内部方法还没有进内部的try{}catch{},因此被外面捕捉。正确被内部捕捉的写法应该如下:

那么是不是第一句写了next()就一定会进入内部try{}catch{}?不一定,下面的例子就是和开头的例子一样的结果:

除了上面的问题,throw会附带执行下一条yield,看看下面的程序:

上面程序中执行g.throw()的时候,首先到了catch(){},然后顺便执行了下一条yield。因此输出的是inside err和b。

其他文章

0
我要评论

评论

返回
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

提交
还可以输入500个字