一对一视频源码,异步中出现了异常该如何处理?

一对一视频源码,异步中出现了异常该如何处理?
js本质上是同步的,是一种单线程语言。诸如浏览器引擎之类的宿主环境使用许多Web API,增强了 js以与外部系统进行交互并处理与 I/O 绑定的操作。浏览器中异步操作有:定时器相关的函数、事件、Ajax请求和 Promise等。

一、定时器的错误处理

复制代码
function failAfterOneSecond() {
    setTimeout(() => {
        throw Error("发生错误");
    }, 1000);
}
try {
    failAfterOneSecond();
} catch (error) {
    console.error("捕获到的错误:", error.message);
}
// Error: 发生错误
//     at Timeout._onTimeout (D:\iflyItem\demo.js:3:15)
//     ...stack
复制代码

 

可以看出来try/catch没有捕获到异常,这是因为try/catch是同步,而setTimeout是异步的。当执行到setTimeout回调时,函数调用栈早就没有try/catch的踪影了,所以异常就无法捕获到。

二、使用Promise处理异常

复制代码
// Promise处理定时器的异常
function failAfterOneSecond() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            reject(Error('发生错误'));
        }, 1000);
    });
}
failAfterOneSecond().catch(
    error => console.log('捕获到的错误:', error.message) // 捕获到的错误: 发生错误
);
​
const promiseSuccess1 = Promise.resolve('resPromiseSuccess1');
const promiseSuccess2 = Promise.resolve('resPromiseSuccess2');
const promiseFaied1 = Promise.reject(Error('resPromiseFaied1'));
const promiseFaied2 = Promise.reject(Error('resPromiseFaied2'));
​
// Promise.all处理错误
Promise.all([promiseSuccess1, promiseSuccess2]).then(res => console.log(res));
// [ 'resPromiseSuccess1', 'resPromiseSuccess2' ]
// Promise.any处理错误
Promise.any([promiseFaied1, promiseFaied2]).catch(error => console.log(error));
// AggregateError: All promises were rejected
// error.errors:['resPromiseFaied1', 'resPromiseFaied2']
// Promise.race处理错误
Promise.race([promiseSuccess2, promiseSuccess1, promiseFaied2])
    .then(res => console.log(res))
    .catch(error => console.log(error));
// resPromiseSuccess2
// Promise.allSettled处理错误
Promise.allSettled([promiseSuccess1, promiseSuccess2, promiseFaied1, promiseFaied2])
    .then(res => console.log(res))
    .catch(error => console.log(error));
// [
//     { status: 'fulfilled', value: 'resPromiseSuccess1' },
//     { status: 'fulfilled', value: 'resPromiseSuccess2' },
//     { status: 'rejected', reason: 'resPromiseFaied1' },
//     { status: 'rejected', reason: 'resPromiseFaied2' }
// ];
复制代码

 

以上就是一对一视频源码,异步中出现了异常该如何处理?, 更多内容欢迎关注之后的文章

posted @   云豹科技-苏凌霄  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2023-05-25 直播系统app源码,图片放大且有渐变色罩层出现
2023-05-25 直播商城系统源码,BottomSheetDialog实现-底部滑动栏
2023-05-25 直播app开发搭建,ImageView 圆角实现 系统自带控件
2022-05-25 短视频源码,uniapp中单选框radio的实现
2022-05-25 直播软件源码,CSS3实现图片立体旋转动画
2022-05-25 视频直播系统源码,使用自定义UI 完成文字颜色加载效果
点击右上角即可分享
微信分享提示