Promise

Promise定義

古人云:「君子一言既出;駟馬難追」,這種「承諾未來會執行」的對象在JavaScript中稱爲Promise對象。node

Promise是JS異步編程中的重要概念,異步抽象處理對象,是目前比較流行Javascript異步編程解決方案之一
Axios 是一個基於 promise 的 HTTP 庫,能夠用在瀏覽器和 node.js 中。ios

常見異步編程方案

  1. 回調函數
  2. 事件監聽
  3. 發佈/訂閱
  4. Promise對象es6

    代碼示列

new Promise(test).then(function (result) {
    console.log('成功:' + result);
}).catch(function (reason) {
    console.log('失敗:' + reason);
});

Promise對象三種狀態

  • 未完成(pending)
  • 已完成(fulfilled)
  • 失敗(rejected)

PromiseA與A+不一樣規範

  • A+規範經過術語thenable來區分promise對象
  • A+定義onFulfilled/onRejected必須是做爲函數來調用,並且調用過程必須是異步的。
  • A+嚴格定義了 then 方法鏈式調用時onFulfilled/onRejected的調用順序編程

    Promise的then方法

promiseObj.then(onFulfilled, onRejected)
onFulfilled = function(value){
    return promiseObj2
}
onRejected = function(value){
    return promiseObj2
}

Promise庫

  • bluebird (擴展了不少實用的方法)
  • Q
  • then.js
  • es6-promise
  • ypromise
  • async
  • native-promise-only
  • ......

Promise.all 接收一個promise對象數組爲參數

只有所有爲resolve纔會調用 一般會用來處理 多個並行異步操做數組

const p1 = new Promise((resolve, reject) => {
    resolve(1111);
});

const p2 = new Promise((resolve, reject) => {
    resolve(2222);
});

const p3 = new Promise((resolve, reject) => {
    reject(3333);
});

Promise.all([p1, p2, p3]).then(data => { 
    console.log(data); // [1, 2, 3]       //結果順序和promise實例數組順序是一致的
}, error => {
    console.log(error);
});
相關文章
相關標籤/搜索