使用yield而不是节点样式回调时如何检查错误?

JavaScript KoaJS

小胖

2020-04-03

我正在用javascript中的新ecma6生成器和yield-operator包住头,特别是在koa的上下文中

考虑一下人为的示例:

  newUser.save(function(err, user) {
    if(err){
      //do something with the error
    }
    console.log("user saved!: " user.id);
  }

'Yieldified'这看起来像这样:

  var user = yield newUser.save();
  console.log("user saved!: " user.id);

但是err,为了执行目的,我将如何检查是否存在//do something with the error

第3942篇《使用yield而不是节点样式回调时如何检查错误?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

1个回答
小卤蛋小卤蛋 2020.04.03

不幸的是,生成器会吸收错误处理。我的意思是在方法的每个步骤中手动检查错误并手动传播错误也很糟糕,但不如try-catchJavascript中语句那么多

   try {
       var user = yield newUser.save();
       console.log("user saved!: " user.id);
   }
   catch (e) {
       //Abstract code that checks if the error is what you think it is
       if (isFromNewUserSave(e)) {

       }
       else {
           throw e;     
       }
   }

如您所见,try catch语句的问题在于它捕获了所有内容还有一个问题是,在运行时会在Javascript中引发其他语言的编译器错误。但是,如果只使用try catch而没有检查,则根本看不到它们。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android