百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Promise使用(promise使用和原理)

liuian 2025-03-25 15:21 56 浏览

介绍

Promise,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大。 promise对象仅有三种状态

  • pending(进行中)
  • fulfilled(已成功)
  • rejected(已失败)

用法

Promise对象是一个构造函数,用来生成Promise实例 const promise = newPromise(function(resolve, reject) {});Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject

  • resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”
  • reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”
new Promise(
  function (resolve, reject) {
    // 一段耗时的异步操作
    resolve('成功') // 数据处理完成
    // reject('失败') // 数据处理出错
  }
).then(
  (res) => {console.log(res)},  // 成功
  (err) => {console.log(err)} // 失败
)

.then()

  1. 接收两个函数作为参数,分别代表fulfilled(成功)和rejected(失败)
  2. then()返回一个新的Promise实例,所以它可以链式调用
  3. 当前面的Promise状态改变时,.then()根据其最终状态,选择特定的状态响应函数执行
  4. 状态响应函数可以返回新的promise,或其他值,不返回值也可以我们可以认为它返回了一个null;
  5. 如果返回新的promise,那么下一级.then()会在新的promise状态改变之后执行
  6. 如果返回其他任何值,则会立即执行下一级.then()
new Promise(
    function(resolve,reject){
        setTimeout(()=>{
            resolve('成功!!!')
            // throw new Error("error 发生了")
            // reject('失败了!!')
        },3000)
    }
).then(
    (res)=>{
        console.log('res', res)
        return "001"
    },
    (err)=>{
        console.log('err', err)
    }
).then(res=>{
    console.log('then2', res)
})

异常处理

异常可以通过reject()或者 throw new Error()方式抛出,捕捉异常也有两种方式

  • 通过then方法的第二个回调函数,then((res)=>{},(err)=>{错误处理})
  • 通过.catch(err=>{})

如果then方法中捕捉了异常,那么catch方法就不会捕捉到,如果then方法没处理,那么catch方法会捕捉到异常

new Promise(
    function(resolve,reject){
        setTimeout(()=>{
            // throw new Error("error 发生了")
            reject('失败了!!')
        },3000)
    }
).then(
    (res)=>{
        console.log('res', res)
    },
    (err)=>{
        // 这里捕获了异常,下面的catch方法不会起作用
        console.log('err', err)
    }
).catch(err=>{
    console.log('catch', res)
})

Promise.all() 和Promise.race()

  • Promise.all()全部执行完成后返回,多个任务返回数组
  • Promise.race()任意一个执行完成后,就返回
let p1 = new Promise((resolve)=>{
        setTimeout(()=>{
            resolve('任务1执行了')
        },3000)
    })
let p2 = new Promise((resolve)=>{
    setTimeout(()=>{
        resolve('任务2执行了')
    },5000)
})
Promise.all([p1,p2]).then(res =>{
    console.log('all执行完成',res)
})
Promise.race([p1,p2]).then(res =>{
    console.log('race执行完成',res)
})

题外话

vue项目如何关闭代码检查?

在工程根目录创建文件vue.config.js,内容如下:

module.exports = {
    lintOnSave: false
}

相关推荐

win7旗舰版好还是win8好(win7好还是win7旗舰版好)

相比较来说,win7系统更好。1、win8只不过是一个win10的过度系统,使用起来并不是很流畅。2、而win7系统已经经历了十数年的考验,拥有很强大的稳定性和兼容性。3、如果我们是在win7和win...

如何修改电脑默认浏览器(如何更改电脑中的默认浏览器)

Windows系统:1.打开“设置”应用。2.点击“应用”。3.点击“默认应用”。4.在“网络浏览器”下,选择你想要设置为默认浏览器的应用。macOS系统:1.打开“Safari”浏览器...

免费下载360杀毒软件手机版(给我下载一个360杀毒软件)

360手机卫士苹果版来自奇虎360推出的一款iPhone手机管理软件,360手机卫士苹果版推为iOS用户提供专业、完善和高效的移动设备管理服务,360手机卫士手机版可以实现流量监控、电池管家、隐私空间...

hotmail官网邮箱登录(hotmail邮箱网址)
  • hotmail官网邮箱登录(hotmail邮箱网址)
  • hotmail官网邮箱登录(hotmail邮箱网址)
  • hotmail官网邮箱登录(hotmail邮箱网址)
  • hotmail官网邮箱登录(hotmail邮箱网址)
office2019专业版永久密钥(word2019专业版密钥)
  • office2019专业版永久密钥(word2019专业版密钥)
  • office2019专业版永久密钥(word2019专业版密钥)
  • office2019专业版永久密钥(word2019专业版密钥)
  • office2019专业版永久密钥(word2019专业版密钥)
qq手机号未验证升级密保(qq手机号未验证就不能用了吗)

QQ更换密保手机可以选择通过密保问题进行验证,而不需要以前绑定的手机号码进行验证。更换QQ手机绑定号码的方法是1登录电脑QQ2选择工具-安全-安全中心首页3.选择右边更换密保手机选项4..点击更换密保...

电脑总是蓝屏自动重启(电脑蓝屏自动重启报错whea uncorrectable)
  • 电脑总是蓝屏自动重启(电脑蓝屏自动重启报错whea uncorrectable)
  • 电脑总是蓝屏自动重启(电脑蓝屏自动重启报错whea uncorrectable)
  • 电脑总是蓝屏自动重启(电脑蓝屏自动重启报错whea uncorrectable)
  • 电脑总是蓝屏自动重启(电脑蓝屏自动重启报错whea uncorrectable)
怎样恢复被删除的好友(如何恢复被误删的好友)
  • 怎样恢复被删除的好友(如何恢复被误删的好友)
  • 怎样恢复被删除的好友(如何恢复被误删的好友)
  • 怎样恢复被删除的好友(如何恢复被误删的好友)
  • 怎样恢复被删除的好友(如何恢复被误删的好友)
开机蓝屏0x000000ed(开机蓝屏0x0000007b怎么解决)

停止代码0x000000ED蓝屏错误,通常称为“UNMOUNTABLE_BOOT_VOLUME”,表示计算机在尝试访问或加载操作系统时遇到问题。这通常是由硬盘驱动器或文件系统损坏引起的,也可能是由...

ps软件在线使用(ps在线工具)

?选择工具是最基本的PS工具之一,具有对图层进行移动和对齐的功能,工具栏上是个亿带十字的箭头图标(区别于路径选择工具,后者是一个标准的箭头图标)。?在使用PS工具的时候,我们要注意鼠标状态的变...

win7平板电脑(win7平板电脑好用吗)

方法一:平板模式只需在操作中心快速切换:1、点击右下角的操作中心图标,在弹出的窗口中点击“平板模式”实现开启或关闭;2、如此一来就能轻松实现平板模式和桌面模式的快速切换了。方法二:系统设置修改1...

windowsxp是哪一年发布的(windowsxp是什么时候发布的)

WindowsXP是微软公司研发的计算机操作系统,于2001年10月25日正式发布。其名字中“XP”的意思来自英文中的“体验”(Experience)。[1][2]WindowsXP使用了Luna...

win8没有无线网络连接(win8无线设备没有wifi)

当Win8.1的网络连接不可用时,您可以尝试以下几种方法来解决问题:1.检查物理连接:确保网络电缆正确连接到计算机和路由器/调制解调器。如果使用的是无线网络,请确保无线适配器已启用,并且与正确的网络...

手机系统重装教程(手机系统如何重装系统)
手机系统重装教程(手机系统如何重装系统)

手机怎么重装系统?1首先我们是需要做好个人数据的备份的,只要做好联系人,文件夹,重要的软件和照片的备份,使用专业的备份软件就可以,我们找到设置然后找到云服务点击进去然后就会有一个云备份,再点进去有个立即备份。2第二个条件就是手机一定要有充足...

2026-01-09 04:55 liuian

笔记本触摸板没反应怎么办(笔记本电脑触摸板没反应怎么回事)
笔记本触摸板没反应怎么办(笔记本电脑触摸板没反应怎么回事)

您可以尝试按下触摸板上方的Fn键加上触摸板功能键来恢复触摸板反应。如果这个方法不行的话,您可以尝试更换电脑驱动或进行一些基础维护来解决问题。触摸板没有反应可能是因为触摸板驱动或者硬件出现问题,还有可能是触摸板出现灰尘卡住,需要进行清理维护。...

2026-01-09 04:05 liuian