1、什么是Promise
Promise 即为一个Es6新增的一个解决异步的方案,译为承诺,在Promise没出现之前,我们获取接口返回的数据都是通过回调函数的方式进行返回,这样造成的后果就是,当我们后期项目比较大的时候,会造成代码堵塞,不易理解,臃肿,难以维护。慢慢就会造成回调地狱的出现。
所谓回调地狱:
doSomething(function(result) {
doSomethingElse(result, function(newResult) {
doThirdThing(newResult, function(finalResult) {
console.log('得到最终结果: ' + finalResult);
}, failureCallback);
}, failureCallback);
}, failureCallback);
阅读回调地狱代码属实头疼,难以接受。。。。。
现可通过Promise来解决这个问题
doSomething().then(function(result) {
return doSomethingElse(result);
})
.then(function(newResult) {
return doThirdThing(newResult);
})
.then(function(finalResult) {
console.log('得到最终结果: ' + finalResult);
})
.catch(failureCallback);
通过Promise的链式调用 瞬间感觉到了代码的清晰易懂程度
- Promise链式调用一下就降低了代码编译的难度
- 代码可读程性明显增强
Promise 有三种状态
- peding 进行中
- resolve 成功的回调
- reject 失败的回调
特点
- 对象的状态不受外界影响,只有异步操作的结果,可以决定当前是哪一种状态
- 一旦状态改变(从
pending
变为fulfilled
和从pending
变为rejected
),就不会再变,任何时候都可以得到这个结果
2、用法
Promise
对象是一个构造函数,可以声明一个变量来进行创建实例
Promise
构造函数接受一个函数作为参数,该函数的两个参数分别是resolve
和reject
resolve
函数的作用是,将Promise
对象的状态从“未完成”变为“成功”reject
函数的作用是,将Promise
对象的状态从“未完成”变为“失败”
Promise
构建出来的实例存在以下方法:
- then() //成功的回调
- catch() //失败的回调
- finally() //指定不管 Promise 对象最后状态如何,都会执行的操作