本文主要参考阮一峰作者的ES6入门,地址ES6 入门教程
目录
Promise.resolve()将现有对象转换成promise对象
定义:
promise:是异步编程的解决方案,将异步操作用同步操作的流程表达出来,避免层层嵌套的回调函数。promise有三种状态:pending(未完成)、fulfilled(成功)、rejected(失败)。
缺点:1.一旦新建就会立即开始,无法中途取消;
2.如果不设置回调函数promise内部抛出的错误不会反映到外面;在pending阶段无法查看进行到哪一步。
3.promise对象是一个构造函数,用来生成promise实例:
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
promise.then
在状态改变的时候接收返回的参数。可以传入两个参数,resolved和rejected的回调函数。
promise.then(function(value) {
// success
}, function(error) {
// failure
});
下面是异步加载图片的例子。
function loadImageAsync(url) {
return new Promise(function(resolve, reject) {
const image = new Image();
image.onload = function() {
resolve(image);
};
image.onerror = function() {
reject(new Error('Could not load image at ' + url));
};
image.src = url;
});
}
下面是一个用
Promise
对象实现的 Ajax 操作的例子。
const getJSON = function(url) {
const promise = new Promise(function(resolve, reject){
const handler = function() {
if (this.readyState !== 4) {
return;
}
if (this.status === 200) {
resolve(this.response);
} else {
reject(new Error(this.statusText));
}
};
const client = new XMLHttpRequest();
client.open("GET", url);
client.onreadystatechan