我正在使用一个模块,如果出错,会抛出错误。该错误不会作为回调的一部分返回,并且在抛出时会停止运行。
我这样称呼它:
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
循环继续。
如何正确捕捉抛出的错误?
答案 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;