从节点模块捕获抛出错误

时间:2017-09-06 17:32:04

标签: javascript node.js

我正在使用一个模块,如果出错,会抛出错误。该错误不会作为回调的一部分返回,并且在抛出时会停止运行。

我这样称呼它:

co(function*(){
  try{
    for (let item of items){
       item.newValue = yield myFunction(param)
    }
  }catch(err){
  }
}

myFunction: function(param){
return new Promise(function(resolve, reject){
   module.callMethod(param), function(result){
     if (result)
         resolve(result)  
  }else{
      reject('err')}
}
}

在callMethod期间,我收到了抛出错误,但它没有被co try捕获,我想在发生错误的情况下抓住它但允许for循环继续。

如何正确捕捉抛出的错误?

1 个答案:

答案 0 :(得分:0)

  

我想在遇到错误的情况下捕获它但允许for循环   继续

Promise构造函数应该将执行程序中抛出的错误视为承诺拒绝。

  

MDN如果执行函数中抛出错误,则承诺为   拒绝。

因此,在for循环中移动try-catch应该有效。



'use strict'
co(function*() {
  for (let item of [1, 2, 3, 4]) {
    try {
      const newValue = yield myFunction(item)
      console.log(newValue)
    } catch (e) {
      console.error(e.message)
    }
  }
})

function callMethod(param, cb) {
  if (param % 2) cb('Success')

  throw new Error(`Invalid param ${param}`)
}

function myFunction(param) {
  return new Promise(function(resolve, reject) {
    callMethod(param, function(result) {
      if (result) {
        resolve(result)
      } else {
        reject('err')
      }
    })
  })
}

<script>
  const module = {}
</script>
<script src="https://unpkg.com/co@4.6.0/index.js"></script>
&#13;
&#13;
&#13;