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