zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Es6系列之深入generator之异常处理与相互调用

ES6异常 处理 系列 深入 调用 相互 Generator
2023-09-14 09:01:05 时间

上面的例子就是在generator里面增加try...catch语句来捕获函数内部的异常,然后generator本身也提供了一个方法用于向外抛出异常

throw 此方法可以向外抛出异常,由外部的try...catch来捕获

function * build(){

 try{

 yield haha;

 }catch(err){

 console.log(inside error:  + err);

var it = build();

 it.throw(from it); // = out error from it

}catch(err){

 console.log(out error:  + err);

假如generator内部没有加上try...catch,然后内部有异常的话,则异常默认会向上抛出,像上面那样的话则可以捕获.

注意:上面generator里的异常捕获只支持同步方法调用

generator 间调用

之前我们都是那一个generator来举例子,下面我们说说怎么在generator函数里调用别的,先上一个例子,然后我们说说它是怎么工作的吧

function* build(){

 var a = yield 1;

 var b = yield 2;

 var c = yield* child();

 console.log(a, b, c);

function* child(){

 var x = yield 3;

 var y = yield 4;

 console.log(x, y);

 return child;

var it = new build();

it.next();

it.next(a);

it.next(b);

it.next(c);

it.next(d);

// = c d

// = a b child

generator提供了yield*的语法来支持调用别的generator函数

yield* 后面跟上别的generator实例就可以遍历别的generator里的yield了

看到上面child里的return了没,这个跟普通调用generator不同的时,这个返回值默认会传递给yield*表达式,像上面那样然后给c本地变量赋值

普通yield表达式假如想有返回值的话,则只能依赖后续的next传递参数进来

上面的例子里只是写了一层调用,其实在child函数还可以调用别的generator函数,然后在里面产生的异常也会一层一层的传递到外面来的. 看下面的例子

function* build(){

 var a = yield 1;

 var b = yield 2;

 try{

 var c = yield* child();

 }catch(err){

 console.log(build error:  + err);

 console.log(a, b, c, d); // = 此处会向上抛异常 d未定义

function* child(){

 var x = yield 3;

 var y = yield 4;

 console.log(x, y, c); // = 此处会向上抛异常 c未定义

 return child;

var it = new build();

it.next();

it.next(a);

it.next(b);

it.next(c);

 it.next(d);

}catch(err){

 console.log(out error:  + err);

// = c d

// = a b child

上面主要说了下generator关于同步操作下的异常处理,以及generator互相调用的问题,下一篇文章主要讲讲generator里调用异步方法的情况.


Clang Module 内部实现原理及源码分析 钉钉工程开始支持Swift,在适配clang module的过程中,遇到了各种各样的编译问题,为了弄清楚这些编译失败的真正原因,以及clang module的最佳实践,决定通过深入阅读clang module的实现代码,来解开这些谜团。
SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理 提到权限管理这块肯定很多人第一想到的就是Springboot Security或者是Shiro安全框架,但本文介绍的并不是这两种,不是因为他们不好用,实在是自己太懒了,我觉得一个拦截器加上其他的一些处理就能满足项目的需求,我又何必去多用一个框架呢,这篇文章也不是去对比谁好谁坏,各位自行抉择。