6.14 ES6的Promise 对象——异步编程的方式
1、Promise 状态
Promise 异步操作有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise对象的参数是一个回调函数,该函数有2个参数,是2个回调函数,一个是成功时调用,一个是失败时调用。
例:
const p1 = new Promise(function(resolve,reject){ resolve('success1'); resolve('success2'); }); const p2 = new Promise(function(resolve,reject){ resolve('success3'); reject('reject'); }); p1.then(function(value){ console.log(value); // success1 }); p2.then(function(value){ console.log(value); // success3 }); //Promise的流式写法:通过then函数,参数中第一个函数是成功返回函数,第二个参数是失败返回函数 promise.then(function(value) { // success }, function(error) { // failure });
2、Promise 方法
(1)Promise.all
用来实现多个异步返回的合并操作,例:
let p1 = new Promise((resolve, reject) => { favourableApi .timeQuery({ favourableCode: code }) .then(res => { resolve(res) }) }) let p2 = new Promise((resolve, reject) => { favourableApi .query({ favourableCode: code }).then(data => { resolve(data) }) }) Promise.all([p1, p2]).then(arry => { let data1= arry[0]//第一个异步返回 let data2= arry[1]//第二个异步返回 })
(2)Promise.race
顾名思义,Promse.race就是赛跑的意思,意思就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
},1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('failed')
}, 500)
})
Promise.race([p1, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error) // 打开的是 'failed'
})
----------------------------------------------------------------------------------------------------------------
本内容为《抹平Vue学习曲线》的部分章节,需要阅读完整书籍的,可以跟作者沟通。
----------------------------------------------------------------------------------------------------------------