``` const promises = files.map(async (item) => { const {name, size} = item; const md5 = await calculateFileMD5(item); return checkFileIsKia({ "file_name": name, "file_size": size, "hash_value": md5, }).then((res) => { if (res?.status === 'success') { Hae.alert(this.$t('meeting.fileExist')) } else { this.$message.error("KIA问题,请联系管理员处理此问题!") } }).catch((error) => { console.error('Error:', error); this.$message.error("发生错误,请联系管理员处理此问题!") }) }) Promise.all(promises) .then(() => { console.log('All files checked successfully.'); }) .catch((error) => { console.error('Error:', error); this.$message.error("发生错误,请联系管理员处理此问题!") }); ```怎样让当promisescatch异常时程序不往下执行
时间: 2025-03-13 18:07:58 浏览: 29
要确保在 `Promise` 链中的任何一个 `catch` 方法捕获到异常时,后续代码不再继续执行并立即中断整个流程,可以通过以下几种方法实现:
### 方法一:使用 `throw` 抛出异常
在每个 `catch` 中抛出一个新的错误或原有的错误,在最外层的 `Promise.all` 捕获这个错误,从而阻止后续逻辑。
```javascript
const promises = files.map(async (item) => {
try {
const { name, size } = item;
const md5 = await calculateFileMD5(item);
const res = await checkFileIsKia({
"file_name": name,
"file_size": size,
"hash_value": md5,
});
if (res?.status === 'success') {
Hae.alert(this.$t('meeting.fileExist'));
} else {
throw new Error("KIA问题,请联系管理员处理此问题!");
}
} catch (error) {
console.error('Error:', error);
this.$message.error(error.message || "发生错误,请联系管理员处理此问题!");
// 抛出异常使 Promise 进入 rejected 状态
throw error;
}
});
Promise.all(promises)
.then(() => {
console.log('All files checked successfully.');
})
.catch((error) => {
console.error('Error:', error);
this.$message.error("发生错误,请联系管理员处理此问题!");
});
```
### 方法二:返回带有状态的对象并在外部过滤失败项
如果不想直接终止所有操作而是想知道哪些文件成功了、哪些失败了,则可以在内部记录结果然后在外围检查是否有任意一项为失败再决定是否向下执行业务逻辑:
```javascript
// 改造后的 promise 返回的结果是一个包含 status 和 message 的对象
const promises = files.map(async (item) => ({
...(await (async () => {
let result = {};
try {
const { name, size } = item;
const md5 = await calculateFileMD5(item);
const res = await checkFileIsKia({
"file_name": name,
"file_size": size,
"hash_value": md5,
});
if (res?.status !== 'success') {
throw new Error("KIA问题,请联系管理员处理此问题!");
}
Object.assign(result, { success: true });
} catch (e) {
console.error(e);
Object.assign(result, { success: false, errorMsg: e.message || "发生未知错误" });
} finally{
return result ;
}
})())
}));
Promise.all(promises).then(results=>{
const hasFailedItem=results.some(({success})=>!success)
if(hasFailedItem){
results.filter(({success,errorMsg})=!success && console.warn(`存在未成功的项目:${errorMsg}`))
this.$message.warning("部分文件存在问题")
}else{
console.log('All files checked successfully.')
}
}).catch(console.error.bind(console));
```
上述两种方式都可以达到你想要的效果。第一种更为简单粗暴地停止了一切;第二种则更灵活但也稍微复杂一点,取决于具体需求选择合适的方案。
阅读全文
相关推荐


















