認識並使用Promise

xieshuning發表於2019-02-16

Promise 是一個非同步操作返回的物件,用來傳遞非同步操作的訊息。

可以解決的問題:

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

Promise 有三種狀態:

  1. Pending Promise 物件例項建立時的初始態;
  2. Fulfilled 成功時的狀態;
  3. 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 ]

相關文章