簡單介紹一下Promise
,就是一個可以進行異步操作的代理對象,在實際工作中有很大的具體實踐。下邊介紹Promise
的幾種簡單用法
1.新建一個Promise對象
//新建一個promise對象
let testPro = new Promise((resolve, reject) => {
var num = Math.random() * 10;
if (num > 5) {
// resolve返回的值,由then方法執行決定
resolve('resolve')
} else {
// reject返回一個狀態爲失敗的Promise對象,給定的信息將會在catch執行
reject('reject')
}
})
testPro.then(res => {
console.log(res) // n>5時打印 resolve
})
.catch(err => {
console.log(err) // n <=5 時打印reject
})
2.新建一個擁有Promise功能的函數
// 返回一個Promise對象即可
let test2 = (n) => {
return new Promise((resolve, reject) => {
if (n > 5) {
resolve('resolve')
} else {
reject('reject')
}
})
}
test2(4).then(res =>{
console.log(res) // 無返回
})
.catch(err =>{
console.log(err) // 打印出 reject
})
3.使用Promise.all()方法的使用
Promise.all()
會返回一個新的Promise
對象,該promise對象在參數對象裏所有的promise對象
都成功的時候纔會觸發成功(resolve),一旦有任何的promise對象
失敗則立即觸發該promise對象的失敗(reject)。
let p1 = new Promise((resolve, reject) =>{
resolve('P1')
});
let p2 = new Promise((resolve, reject) =>{
setTimeout(resolve('P2'), 1000);
});
// 同時執行p1和p2,並在它們都完成後執行then:
Promise.all([p1, p2]).then((res) =>{
console.log(res); // 獲得一個Array: ['P1', 'P2']
})
.catch(err =>{
console.log(err)
})
4.Promise.race()方法的使用
Promise.race()
會返回一個新的Promise
對象,該promise對象在參數對象裏只要有一個promise對象
成功或者失敗,就會觸發這個對象的resolve或者reject函數
let p1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, 'one');
});
let p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'two');
});
Promise.race([p1, p2]).then((res) => {
console.log(res); // two
});