ES6 Promise 对象基础用法与实例详解
本文详解ES6中Promise对象的基本功能与用法。介绍Promise作为异步编程解决方案的核心概念,涵盖通过构造函数生成实例、使用then方法处理resolved和rejected状态、利用finally方法执行最终操作,以及Promise.resolve()的转换用法,并提供图片加载和Ajax请求的代码实例。
Promise对象概述与基本用法
本文通过具体实例解析ES6中Promise对象的核心功能与使用方式,供读者参考学习。
Promise是异步编程的一种解决方案,主要用于处理回调函数和事件。
根据ES6规范,Promise对象是一个构造函数,用于创建Promise实例。
以下代码演示了如何创建一个Promise实例。
基本用法
ES6规定,Promise对象是一个构造函数,用于生成Promise实例。
const promise = new Promise(function(resolve, reject) {
//resolve (data) 成功
//reject (error )失败
});
创建Promise实例后,可以使用then方法分别指定resolved状态和rejected状态的回调函数。
then方法处理状态回调
promise.then(function(value) {
// success
}, function(error) {
// err
});
then方法可接受两个回调函数作为参数。第一个函数在Promise状态变为resolved时调用,第二个函数在状态变为rejected时调用。第二个函数为可选参数,并非必须提供。这两个函数均接收Promise对象传出的值作为参数。
以下是一个简单的Promise对象示例。
function fun(ms){
return new promise((res,rej) => {
setTimeout(res,ms)
})
}
fun(100).then((val) => {
console.log(val)
})
Promise还可用于图片加载场景。
Promise在图片加载中的应用
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包装了一个图片加载的异步操作。若加载成功,则调用resolve方法;若失败,则调用reject方法。
2、使用Promise对象实现Ajax操作的示例。
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.onreadystatechange = handler;
client.responseType = "json";
client.setRequestHeader("Accept", "application/json");
client.send();
});
return promise;
};
getJSON("/posts.json").then(function(json) {
console.log('Contents: ' + json);
}, function(error) {
console.error('出错了', error);
});
需注意,调用resolve或reject并不会终止Promise参数函数的执行。
Promise.prototype.finally()
finally方法用于指定无论Promise对象最终状态如何,都会执行的操作。该方法由ES2018标准引入。
finally方法的使用
promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});
上述代码中,无论promise最终状态如何,在执行完then或catch指定的回调函数后,都会执行finally方法指定的回调函数。finally本质上是then方法的特例。
Promise.resolve()
Promise.resolve方法转换对象
//有时需要将现有对象转为 Promise 对象,Promise.resolve方法就起到这个作用。
const jsPromise = Promise.resolve($.ajax('/whatever.json'));
上述代码将jQuery生成的deferred对象转换为一个新的Promise对象。
Promise.resolve等价于以下写法。
Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))
//Promise.resolve方法的参数分成四种情况。
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
ES6模块化中js文件怎么用import和export交互
2026-11-05 17:00:48
JS读取本地文件时报错或无响应的常见原因
2026-11-05 16:32:31
let、const与var的区别:JavaScript变量声明最佳实践
2026-11-05 14:16:38
JS中直接定义静态二维数组的字面量写法
2026-11-05 14:16:08
JS 怎么查找字符串中所有匹配项的位置
2026-11-05 14:15:53
