Promise和async/await

本文详细介绍了Promise在JavaScript中的作用,包括解决回调地狱的问题、状态转换、实例方法如`.then()`、`.catch()`和`.finally()`,以及类方法如`.resolve()`、`.reject()`等。此外,还讨论了async/await的异步编程风格,让异步代码更易读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Promise是异步编程的一种解决方案,用来解决多层回调嵌套的问题。它的构造函数是同步执行的,then 方法是异步执行的,所以创建后里面的函数会立即执行,构造函数中的resolve和reject只有第一次执行有效,也就是说Promise状态一旦改变就不能再变。简单说Promises是一个容器或对未来事情的承诺。

const p = new Promise((resolve, reject) => {
    resolve(22);
})
console.log(p); //22
【回调地狱:代码臃肿、可读性差、耦合度高、只能在回调里处理异常】

状态

有三种状态:pending(进行中)、fullfilled(已完成)、rejected(已失败)。只有异步操作的结果可以决定当前是哪一种状态,任何其他操作都不能改变这个状态。未调用resolvereject前它处于pending状态,调用resolve后处于fullfilled状态,调用reject后处于rejected状态。只能有pending->fullfilledpending->rejected这两种过程。当确定为fullfilledrejected后就会处于敲定(settled)状态不会再变

实例方法

1.Promise.then();//注册回调函数,可链式调用,返回值是一个Promise对象

2.Promise.catch();//处于rejected状态或者抛出异常或者错误时执行

3.Promise.finally();//无参数的,无论Promise对象变成fulfilled或reject状态,最终都会执行

类方法

1.Promise.resolve();//相当于new Promise,并且执行resolve操作

2.Promise.reject();//相当于new Promise,并且执行reject操作

3.Promise.race();//多个任务同时执行,返回最先执行结束的结果,无论成功或失败

4.Promise.any();//返回任意一个最快执行 resolve 回调的 Promise 对象

5.Promise.allSettled();//当多个任务都结束(完成或失败)时,返回一个包含每个 Promise 解决状态的对象数组,每个对象表示对应的promise结果,都含有status和value属性

6.Promise.all();//多任务同时执行,若成功则以数组方式返回,若有一个reject则返回reject结果

Promise.all([promise1, promise2, promise3]).then(()=>{})

async/await

使得异步代码看起来像同步代码。async 函数的返回值为 Promise 对象,await 必须写在 async 函数中, 但 async 函数中可以没有 await,如果 await 的 Promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理。generatorasync/await类似。

function fn2() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            // resolve(1000)
            reject(1000)
        }, 1000);
    })
}
async function fn3() {
    try {
        const value = await fn2()
    } catch (error) {
        console.log('得到失败的结果', error)
    }
}
fn3() // 得到失败的结果 1000

参考

promise和async await区别 - 简书

Promise精选面试题 - 简书

Promise(详细讲解,后续会进行更新... ...)_promise.all(paths.map-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值