JavaScript的ES6中Promise的使用以及个人理解

简介: JavaScript的ES6中Promise的使用以及个人理解

好多小伙伴不理解Promise这个到底是干嘛的,怎么用?本篇就讲介绍下Promise内置类的使用以及作用。
一、先来说说Promise是什么
1.Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

2.从语法上说,promise 是一个对象,从它可以获取异步操作的的最终状态(成功或失败)。

3.Promise是一个构造函数,对外提供统一的 API,自己身上有all、reject、resolve等方法,原型上有then、catch等方法

二、那么promise有什么作用
解决地狱回调
可以链式调用
应用场景:封装ajax,axios的get,post封装,微信小程序中封装wx.request(),uniapp开发中uni.request()
以上就是简单的对promise简单的介绍,promise的最主要的功能就是可以链式调用,这样就解决了回调地狱的出现,可以通过.then这个方法拿到参数大大的增加了代码的可读性

三、使用new来创建一个promise对象
Promise接受一个函数作为参数,该函数的两个参数分别是resolve和reject。这两个函数就是回调函数

resolve函数的作用:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;

reject函数的作用:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

const promise = new Promise((resolve, reject) => {
if (success) {
resolve(value); // fulfilled
} else {
reject(error); // rejected
}
});
四、Promise的API
1.then()方法就是把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。而 Promise 的优势就在于这个链式调用。我们可以在 then 方法中继续写 Promise 对象并返回,然后继续调用 then 来进行回调操作。可有两个参数,第一个是成功 resolve 调用的方法,第二个是失败 reject 调用的方法

const promise = new Promise((resolve,reject)=>{
resolve('成功')
})
promise.then((res)=>{
console.log(res); //成功
},(err)=>{
console.log(err);//未执行
})
'
运行运行
上面样例我们通过 resolve 方法把 Promise 的状态置为完成态(Resolved),这时 then 方法就能捕捉到变化,并执行“成功”情况的回调。
而 reject 方法就是把 Promise 的状态置为已失败(Rejected),这时 then 方法执行“失败”情况的回调(then 方法的第二参数)

2.catch()方法和 then 的第二个参数一样,用来指定 reject 的回调,这里有一个点,就是如果then中有第二个参数,并且还有catch的时候会执行then的第二个参数。

它的另一个作用是,当执行 resolve 的回调(也就是上面 then 中的第一个参数)时,如果抛出异常了(代码出错了),那么也不会报错卡死 js,而是会进到这个 catch 方法中。

const promise = new Promise((resolve,reject)=>{
reject('失败')
})
// 使用catch方法进行捕捉错误
promise.catch(err=>{
console.log(err);//失败
})
//then的第二个参数的使用
promise.then((res)=>{
console.log(res); //未执行
},(err)=>{
console.log(err);//失败
}).catch(err=>{
console.log(err);
})
'
运行运行
3.all()方法

promise 的 all 方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。all方法接受一个数组作为参数,参数是回调函数,只有所有的回调返回成功,才会执行成功的回调,如果有一个失败就会执行失败的回调

例子如下:

const promiseOne = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('成功1')
}, 1000);
})
const promiseTwo = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('成功2')
}, 2000);
})
const promiseThree = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('成功3')
}, 3000);
})
Promise.all([promiseOne,promiseTwo,promiseThree]).then(res=>{
console.log(res);//['成功1', '成功2', '成功3']
})

'
运行运行
4.race()方法race 按字面解释,就是赛跑的意思。race 的用法与 all 一样,只不过 all 是等所有异步操作都执行完毕后才执行 then 回调。而 race 的话只要有一个异步操作执行完毕,就立刻执行 then 回调,无论成功还是失败

注意:其它没有执行完毕的异步操作仍然会继续执行,而不是停止。

const promiseOne = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('成功1')
}, 1000);
})
const promiseTwo = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('成功2')
}, 2000);
})
const promiseThree = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('成功3')
}, 3000);
})
Promise.race([promiseOne,promiseTwo,promiseThree]).then(res=>{
console.log(res);//成功1
})

'
运行运行

相关文章
|
18天前
|
前端开发 JavaScript
用JavaScript 实现一个简单的 Promise 并打印结果
用 JavaScript 实现一个简单的 Promise 并打印结果
|
28天前
|
前端开发
理解 ES6 中的 Promise
【10月更文挑战第24天】ES6 中的 Promise 是一种用于处理异步操作的机制,它提供了一种更优雅、更可控的方式来处理异步任务的结果。Promise 可以看作是对异步操作结果的一种承诺,它可以处于三种不同的状态:Pending(等待中)、Fulfilled(已完成,即成功)和 Rejected(已拒绝,即失败)。
|
18天前
|
JSON 前端开发 JavaScript
在 JavaScript 中,如何使用 Promise 处理异步操作?
通过以上方式,可以使用Promise来有效地处理各种异步操作,使异步代码更加清晰、易读和易于维护,避免了回调地狱的问题,提高了代码的质量和可维护性。
|
23天前
|
JSON 前端开发 JavaScript
浅谈JavaScript中的Promise、Async和Await
【10月更文挑战第30天】Promise、Async和Await是JavaScript中强大的异步编程工具,它们各自具有独特的优势和适用场景,开发者可以根据具体的项目需求和代码风格选择合适的方式来处理异步操作,从而编写出更加高效、可读和易于维护的JavaScript代码。
23 1
|
1月前
|
存储 JavaScript 前端开发
JS的ES6知识点
【10月更文挑战第19天】这只是 ES6 的一些主要知识点,ES6 还带来了许多其他的特性和改进,这些特性使得 JavaScript 更加现代化和强大,为开发者提供了更多的便利和灵活性。
20 3
|
2月前
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
43 4
|
2月前
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
26 1
|
2月前
|
前端开发 JavaScript 开发者
JavaScript 中的异步编程:深入了解 Promise 和 async/await
【10月更文挑战第8天】JavaScript 中的异步编程:深入了解 Promise 和 async/await
|
24天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
42 0
|
2月前
|
前端开发 JavaScript UED
深入了解JavaScript异步编程:回调、Promise与async/await
【10月更文挑战第11天】深入了解JavaScript异步编程:回调、Promise与async/await
20 0