1. 程式人生 > >Promise對象

Promise對象

pan spa () onerror 圖片 pro 執行 編程 func

promise是異步編程的一種解決方案,promise對象代表一個異步操作。

promise對象有三種狀態:pending(進行中),resolved(已完成)和rejected(已失敗),只有異步操作的結果可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。

Promise對象是一個構造函數,用來生成Promise實例。

var promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/* 異步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});



Promise構造函數接收2個函數參數:

1.resolve函數:將promise對象從pending狀態變為resolved。在異步操作成功時調用,並將異步調用的結果作為參數傳遞出去。

2.reject函數:將promise對象從pending狀態變為rejected狀態。在異步操作失敗時調用,並將異步操作報出的錯誤傳遞出去。

Promise實例生成之後,可以使用then方法分別指定Resolved狀態和Rejected狀態的回調函數。

實例:異步加載圖片

function loadImageAsync(url) {
  return new Promise(function(resolve, reject) {
    console.log(‘start‘)

    var image = new Image();

    image.onload = function() {

      resolve(image);
      console.log(‘image.onload‘)
    };

    image.onerror = function() {
      console.log(‘image.onerror‘)
      reject(new Error(‘Could not load image at ‘ + url));
    };

    image.src = url;
    console.log(‘end‘)
  });
}

執行:
var s=loadImageAsync(‘https://imgsrc.baidu.com/imgad/pic/item/caef76094b36acaf0accebde76d98d1001e99ce7.jpg‘)

結果:
start
end
undefined
image.onload


執行:

s

結果:

Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: img}

執行:

var f=loadImageAsync(‘https://imgsrc/c323232.jpeg‘)

結果:
start
end
undefined
image.onerror
Uncaught (in promise) Error: Could not load image at https://imgsrc/c323232.jpeg

Promise對象