聊一聊关于Promise的基础问题以及Promise的进阶问题 (aysnc、await、finally、for await of )

本文介绍了Promise在ES6中的基本概念,包括其构造函数、状态转换和常用方法如all、race。接着讨论了ES8~9中新增的async、await的用法及其伴生的注意事项,如await必须配合aysnc使用,且只能用于Promise对象。还探讨了finally方法和如何通过for await of遍历异步操作集合,以解决遍历过程中遇到的问题。

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

简介

在ES6里面为了解决回调地狱的问题,引入了一个新的概念,就是Promise,而在之后的ES8,ES9里面,又都根据原Promise的基础上,对该语法进行了完善。

ES6里的Promise

Promiss函数,其实本质上来说,它是一个构造函数,它本身自带有的属性就是 all,race,resolve,reject

同时Promise构造函数存在三个执行的状态,分别是padding(进行中),fulfilled(已经成功),rejected(已经失败)

因为它是一个构造函数,所以在它的原型上,也会有对应的属性,分别是then(成功的时候执行),catch(失败的时候执行),finally(不管成功失败都执行)。这三个在原型上的属性其实也就是这个Promise的回调函数。

说完Promise的基础知识,接下来说一下Promise的基础语法。
这里我举个例子,就是来封装一个简单的Ajax来说明

function get (URL) {
   
    return new Promise((resolve,reject)=>{
   
        let req = new XMLHttpRequest
        req.open('GET',URL,true)
        req.onload = function(){
   
            if(req.status===200){
   
                resolve(req.responseText)
            }else{
   
                reject(new Error(req.statusText))
            }
        }
        req.onerror(new Error(req.statusText))
        req.send()
    })
}

这样就封装完一个简单的Promise了,那么使用它的方法是这样

get(请求的地址)
.then(response=>{
   })
.catch(error=>{
   })

这里有一个要说明的地方,就是Promise的状态是单向的,也就是一旦确定,那么就不可逆转,也就是当你的Promise的状态由 padding 转变到 fulfilled或者变成 rejected 状态的时候,就不会再重新转变为padding 状态了。

Promise的一些简写

在开发过程中,Promise也提供了一些简写的方法

let get = function(){
   
    return Promise.resolve(44)
}
//上面相当于是下面式子的简写
let get = function(){
   
    return new Promise(resolve=>{
   
        resolve(44)
    })
}
get().then(response=>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值