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

我正在用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

小卤蛋小卤蛋2020/04/03 10:58:10

不幸的是,生成器会吸收错误处理。我的意思是在方法的每个步骤中手动检查错误并手动传播错误也很糟糕,但不如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而没有检查,则根本看不到它们。