一、瞭解 Promise:
Promise 是一個非同步操作返回的物件,用來傳遞非同步操作的訊息。
可以解決的問題:
- 解決了回撥地獄問題,不會導致難以維護;
- 合併多個非同步請求,節約時間。
Promise 有三種狀態:
- Pending Promise 物件例項建立時的初始態;
- Fulfilled 成功時的狀態;
- Rejected 失敗時的狀態。
二、使用 Promise:
Promise.then():用來指定 Promise 物件的狀態改變時要執行的操作。
let promise = new Promise(function (resolve, reject) {
resolve('成功');
//reject('失敗');
})
promise.then(function (data) {
console.log('data: ', data);
},function (err) {
console.log('err: ', err);
})
複製程式碼
Promise.all():接收一個陣列,陣列內是 Promise 例項,必須都成功呢才表示成功。
Promise.race():接收一個陣列,陣列內是 Promise 例項,最早返回的物件成功了,就變為成功態,如果失敗了,就改變狀態為失敗態。
let fs = require('fs');
function read(url){
return new Promise(function(resolve, reject){
fs.readFile(url,'utf8',function(err, data){
if(err) reject( err);
resolve( data);
})
})
}
Promise.all([read('1.txt'), read('2.txt')]).then(function (data) {
console.log(data);
},function (err) {
console.log('err: ', err);
})
Promise.race([read('1.txt'), read('2.txt')]).then(function (data) {
console.log(data);
},function (err) {
console.log('err: ', err);
})
複製程式碼
Promise.resolve():返回一個 Promise 例項,這個 Promise 例項處於 resolve 狀態。
Promise.resolve([1,2,3]).then(function(data){
console.log(data);
});
複製程式碼
輸出:[ 1, 2, 3 ]
Promise.reject():返回一個 Promise 例項,這個 Promise 例項處於 reject 狀態。
Promise.reject([1,2,3]).then(null,function(err){
console.log('err',err)
});
複製程式碼
輸出:err [ 1, 2, 3 ]