什么是promise?
解决异步编程的一种方案。谁白了就是构造函数,通过实例化对象来使用,并不是说解决异步编程非得用promise,相对于原生的异步任务来说的,那么就先说说原生的js怎么实现异步操作的都吧,定时器,典型的异步任务,定时器任务就是通过定时器的回掉函数来实现异步操作。
为什么要用promise?
- 解决回掉地狱的问题,也就是回掉函数的嵌套使用,对结果数据的处理更加方便
- 回掉事件的分离,也就是使代码的可读性增强
怎么用promise?
var p = new Promise((reslove, reject) => {
reslove('成功的数据');
reject('失败的数据')
}).then(function(value) {
//返回的是成功的数据
console.log(value);
}, function(reason) {
//返回的是失败的数据
console.log(reason);
})
promise对象的方法all race reject resolve
race和all方法类似,都是返回异步的结果,但是不痛的是,all必须所有的异步都完成了并且都成功了才返回结果。
用法 promise.all()接受数组形式的参数
p.all([p1, p2, p3])
.then(function(resolve) {
console.log(resolve)
})
需要注意的p1,p2,p3都是promise实例对象是以数组的形式传入的,并且只有当三个都执行完了才会返回.then的结果,还是成功的回掉函数
promise.race() 改方法的用法和all类似,只不过是满足的条件是不同的,只要有成功的回掉,就会返回then结果,其余的回掉将不再执行。
reject和resolve就是返回成功失败的回掉,返回的是新的promise对象,要想得到数据则得通过then方法拿到成功或失败的数据。
promise原型上的方法 catch then finally
catch也就是失败的回掉,相当于then的第二个参数,
then也就是无论成功与否都会返回一个结果,拿到成功的数据和失败的数据
finally在promise结束之后无论返回结果是啥,都会触发的函数。
个人是从以上三个方面去理解promise,但是解决异步编程的更好的办法就是es7中的async,await至于这个终极方案会在以后的文章中详细解释。
以上都是个人的学习笔记,仅供参考