認識並使用 Promise

1 什麼是Promise

Promise 是一個異步操作返回的對象,用來傳遞異步操作的消息。

可以解決的問題:

  1. 解決了回調地獄問題,不會導致難以維護;
  2. 合併多個異步請求,節約時間。

Promise 有三種狀態:

  1. Pending Promise 對象實例創建時的初始態;
  2. Fulfilled 成功時的狀態;
  3. Rejected 失敗時的狀態。

2 使用 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 ]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章