Promise對象
promise是異步編程的一種解決方案,promise對象代表一個異步操作。
promise對象有三種狀態:pending(進行中),resolved(已完成)和rejected(已失敗),只有異步操作的結果可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。
Promise
對象是一個構造函數,用來生成Promise
實例。
|
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對象