终于理清楚了Promise以及async和await

本文详细介绍了Promise的原理和用法,包括其三个状态、基本使用、为何使用Promise来解决异步问题、Promise.all()和Promise.race()的用法,以及Promise的关键问题。接着,文章探讨了async函数和await关键字,阐述了它们如何简化异步编程,以及await如何处理Promise结果和异常。
摘要由CSDN通过智能技术生成

promise理解:

1,是js异步编程的新的解决方案
2,是一个构造函数
3,用来封装一个异步操作,并可以获得其结果

promise三个状态:

1,pendding 未确定
2,resolved 成功
3,rejected 失败
注:状态只能改变一次,成功数据称为value,失败称为reason

promise的基本使用

在这里插入图片描述

为什么要用Promise:

1.指定回调函数的方式灵活,可以在异步任务前指定也可以在异步任务后指定,而以前指定回调函数必须在异步任务开始前指定。
2.支持链式调用,可以解决回调地狱问题
3.回调地狱:回调函数嵌套调用,内层的回调函数需要的条件是外层异步执行的结果。不便于阅读还有异 常处理,
4.解决方案。promise链式调用。
5.最佳解决方案,async/awai(在程序员角度没有回调函数,编译后其实还是会有回调函数)

语法糖

p3.then(null,reason => {})相当于p3.catch( reason =>{} )

Promise是一种用于处异步操作的特殊对象。它表示一个尚未完成但最终会完成的操作,并可以用于处回调地狱和编写更清晰、更可读的异步代码。一个Promise对象有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。一旦Promise的状态变为fulfilled或rejected,它就被认为是已解决(settled)。 创建Promise对象时,我们可以通过传递一个执行器函数来定义异步操作。执行器函数接受两个参数:resolve和reject。当异步操作成功时,我们可以调用resolve函数将Promise的状态设置为fulfilled,并传递解决值。当异步操作失败时,我们可以调用reject函数将Promise的状态设置为rejected,并传递错误信息。 下面是一个使用Promise的简单示例: ```javascript const myPromise = new Promise((resolve, reject) => { // 异步操作 setTimeout(() => { const randomNumber = Math.random(); if (randomNumber > 0.5) { resolve(randomNumber); } else { reject('Number is less than 0.5'); } }, 1000); }); // 使用then()方法处Promise的解决结果 myPromise.then((result) => { console.log('Resolved:', result); }).catch((error) => { console.log('Rejected:', error); }); ``` 上面的代码创建了一个Promise对象,其中包含一个延迟1秒的异步操作。如果生成的随机数大于0.5,则调用resolve函数解决Promise,否则调用reject函数拒绝Promise。然后,我们使用then()方法处Promise的解决结果,catch()方法处Promise的拒绝结果。 在ES2017中,引入了async/await关键字,它们是使用Promise的语法糖,可以更简洁地处异步操作。 async函数是一个返回Promise的函数,它使用async关键字声明。在async函数中,我们可以使用await关键字来等待一个Promise解决,并返回解决值。使用async/await可以将异步代码写成类似于同步代码的形式,使其更易读和解。 下面是一个使用async/await的示例: ```javascript function delay(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } async function myAsyncFunction() { try { console.log('Start'); await delay(1000); console.log('After 1 second'); await delay(2000); console.log('After 2 seconds'); } catch (error) { console.log('Error:', error); } } myAsyncFunction(); ``` 上面的代码定义了一个async函数`myAsyncFunction()`,其中使用了await关键字等待两个延迟操作的Promise解决。通过使用try-catch块,我们可以捕获可能出现的错误。 当我们调用`myAsyncFunction()`时,它会被执行,并按顺序打印出"Start"、"After 1 second"和"After 2 seconds"。由于async函数返回一个Promise,我们也可以使用then()和catch()方法来处解决和拒绝结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值