谈谈你对promise的理解?

简介: Promise是ES6异步编程的一种解决方案(目前最先进的解决方案是async和await的搭配(ES8),但是它们是基于promise的),从语法上讲,Promise是一个对象或者说是构造函数,用来封装异步操作并可以获取其成功或失败的结果。

一、什么是Promise

Promise是ES6异步编程的一种解决方案(目前最先进的解决方案是async和await的搭配(ES8),但是它们是基于promise的),从语法上讲,Promise是一个对象或者说是构造函数,用来封装异步操作并可以获取其成功或失败的结果。

二、promise的好处

1.可以避免多层异步调用嵌套问题(回调地狱)

2.Promise 对象提供了简洁的API,使得控制异步操作更加容易(js执行机制导致的异步问题)

这两点在我ES6专栏的相关文章有很详细的介绍,这里就不展开了

三、promise的三种状态

它的三种状态分别为

1.pending等待中,或者进行中,表示还没有得到结果

2.resolved 已经完成,表示得到了我们想要的结果,可以继续往下执行

3.rejected 也表示得到结果,但是由于结果并非我们所愿,因此拒绝执行


注意这三种状态不受外界影响,而且状态只能从pending改变为resolved或者rejected,并且不可逆

三、promise的用法

1.promise的实例方法

1.then()得到异步任务的正确结果

2.catch()获取异常信息

3.finally()成功与否都会执行(尚且不是正式标准)

注意then方法可以接受两个函数,第一个函数为promise状态为成功的回调函数,第二个函数为promise状态为失败的回调函数(可以不写,一般用catch方法捕获promise状态为失败的异常信息)


2.promise的对象方法(p1,p2,p3为promise的实例对象)

1.Promise.all()并发处理多个异步任务,所有任务都执行完成才能得到结果

Promise.all( [p1,p2,p3] ) .then ( (result) => {consoleog (result)
})

2.Promise.race()并发处理多个异步任务,只要有一个任务完成就能得到结果

Promise.race ( [p1,p2,p3] ).then ( (result)=>{
console. log (result)
})

四、总结

1.promise其实就是一个对象或者说是构造函数

2.promise的出现(es6) 就是解决异步编程和回调地狱等问题,async和await的出现(ES8)就是基于promise的一种解决异步编程的终极解决方案(简化代码等等)

3.在前端中,ajax和axios都会用到异步编程,axios更是基于promise的,所以一定要掌握promise以及用async和await搭配promise的使用

相关文章
|
3月前
|
前端开发 JavaScript API
【面试题】说说 Promise是什么?如何使用
【面试题】说说 Promise是什么?如何使用
|
8月前
|
前端开发
一篇搞懂promise
一篇搞懂promise
83 0
|
7月前
|
前端开发 JavaScript
搞懂Promise
搞懂Promise
28 0
|
8月前
|
前端开发 JavaScript
【面试题】说一下promise的理解
promise详解,方法的应用场景
【面试题】说一下promise的理解
|
9月前
|
前端开发
Promise是什么?怎么用?
Promise 是一种异步编程的解决方案。它可以使异步操作更加清晰、简单、优雅,避免了回调地狱的问题。Promise 对象表示一个异步操作的最终完成或失败,并且它的最终状态(完成或失败)和返回值(或错误)不依赖于调用它的代码。
|
11月前
|
存储 缓存 自然语言处理
吊打面试官:promise原理详解
吊打面试官:promise原理详解
157 0
|
前端开发
前端学习案例2-promise面试题之2
前端学习案例2-promise面试题之2
34 0
前端学习案例2-promise面试题之2
|
前端开发
前端学习案例-promise面试题之1
前端学习案例-promise面试题之1
48 0
前端学习案例-promise面试题之1
|
前端开发
前端学习案例4-promise面试题4
前端学习案例4-promise面试题4
41 0
前端学习案例4-promise面试题4
|
前端开发 API
听说你还不知道Promise的allSettled()和all()的区别?
从 ES2015 起, promises 的出现,让我们简化了异步操作。(所以 promise 越来越流行,掌握它的相关 API 变得至关重要)。
听说你还不知道Promise的allSettled()和all()的区别?