首页 > 编程语言 >一对一视频源码,异步中出现了异常该如何处理?

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

时间:2024-05-25 11:41:19浏览次数:15  
标签:异步 console log 一对一 res 源码 Promise error catch

一对一视频源码,异步中出现了异常该如何处理?
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' }
// ];

 

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

标签:异步,console,log,一对一,res,源码,Promise,error,catch
From: https://www.cnblogs.com/yunbaomengnan/p/18212220

相关文章

  • C#串口通讯 源码Demo
    在C#中进行串口通讯主要涉及到以下几个步骤:引入命名空间usingSystem.IO.Ports;创建SerialPort对象SerialPortport=newSerialPort();设置串口属性//设置串口名:port.PortName="COM1";//设置波特率:port.BaudRate=9600;//设置校验位:port.Parity=Parity.None;//......
  • Python异步编程之基础概念
    Python异步编程之基础概念在现代编程中,异步编程是一种重要的技术,尤其是在处理I/O密集型任务时,异步编程可以大大提高程序的性能和响应速度。本文将介绍Python异步编程的基础概念,帮助你理解其原理和应用。什么是异步编程?异步编程是一种并发编程模型,它允许程序在等待某些任......
  • 深入解析Python并发的多线程和异步编程
    在Python编程中,多线程是一种常用的并发编程方式,它可以有效地提高程序的执行效率,特别是在处理I/O密集型任务时。Python提供了threading模块,使得多线程编程变得相对简单。本文将深入探讨threading模块的基础知识,并通过实例演示多线程的应用。1.多线程基础概念在开始之前,让我们......
  • 如何判断Java代码中异步操作是否完成
    在许多应用程序中,我们经常使用异步操作来提高性能和响应度。在Java中,我们可以使用多线程或者异步任务来执行耗时操作,并且在后台处理过程完成后获取结果。但是,在使用异步操作时,我们通常需要知道异步任务何时完成,以便进行下一步的操作。本篇文章将介绍几种常见的方法来判断Java......
  • 一对一直播源码,路由加载优化白屏
    一对一直播源码,路由加载优化白屏目标:缩小打包体积,优化白屏时间路由懒加载constHome=()=>import(/*webpackChunkName:"home"*/"@/views/home/index.vue");constMetricGroup=()=>import(/*webpackChunkName:"metricGroup"*/"@/views/met......
  • 一对一聊天软件源码,提升系统性能的图片加载方式
    一对一聊天软件源码,提升系统性能的图片加载方式——图片的懒加载原理:由于浏览器会自动对页面中的img标签的src属性发送请求并下载图片,可以通过html5自定义属性data-xxx先暂存src的值,然后在图片出现在屏幕可视区域的时候,再将data-xxx的值重新赋值到img的src......
  • 视频聊天源码,同步、异步示例代码分析
    视频聊天源码,同步、异步示例代码分析同步示例代码:console.log("开始");functionsyncOperation(){console.log("同步操作");}syncOperation();console.log("结束"); 输出结果:开始同步操作结束 在上述代码中,同步操作syncOperation()按照顺序......
  • 酷黑简洁大气体育直播自适应模板赛事直播门户网站源码
    源码名称:酷黑简洁大气体育直播自适应模板赛事直播门户网站源码开发环境:帝国cms7.5安装环境:php+mysql支持PC与手机端同步生成html(多端同步生成插件)带软件采集,可以挂着自动采集发布,无需人工操作!演示地址:http://demo51.52muban.cc/模板特点:1、程序伪静态版本,实时采集更新,......
  • 仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码
    码名称:仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码开发环境:帝国cms7.5空间支持:php+mysql 仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码+自动采集-我爱模板网源码名称:仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码开发环境:帝国......
  • 联网安装与源码安装mysql
    一、卸载mariadb的rpm包1、首先,你需要找出已安装的MariaDB包的具体名称。可以使用以下命令列出所有已安装的MariaDB包:rpm-qa|grepmariadb2、删除命令(安装mysql不一定需要卸载)yum-yremove+【上图的文件名】或者rpm-e--nodeps+【上图的文件名】二、通过yum在线安装M......