Promise基本使用
Promise 概述
Promise 是 ES6 中新增的一个对象,通过 Promise 就可以实现,用 同步
的流程来表示异步的操作,通过 Promise 就可以避免回调函数层层嵌套(回调地狱)的问题。
MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise
创建 Promise 对象
new Promise(function(resolve, reject){});
promise 对象不是异步的, 只要创建 promise 对象就会立即执行存放的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
<script>
console.log("1");
let promise = new Promise(function (resolve, reject) {
console.log("2");
});
console.log("3");
</script>
</head>
<body>
</body>
</html>
Promise 是如何实现通过同步的流程来表示异步的操作的, promise 对象是通过状态的改变来实现的, 只要状态发生改变就会自动触发对应的函数
Promise 对象三种状态
- pending:默认状态,只要没有告诉 promise 任务是成功还是失败就是
pending
状态
- fulfilled(resolved): 只要调用
resolve
函数, 状态就会变为fulfilled
, 表示操作成功
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
<script>
let promise = new Promise(function (resolve, reject) {
resolve();
});
console.log(promise);
</script>
</head>
<body>
</body>
</html>
- rejected: 只要调用
rejected
函数, 状态就会变为rejected
, 表示操作失败
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
<script>
let promise = new Promise(function (resolve, reject) {
reject();
});
console.log(promise);
</script>
</head>
<body>
</body>
</html>
注意点: 状态一旦改变既不可逆, 既从
pending
变为fulfilled
, 那么永远都是fulfilled
,既从pending
变为rejected
, 那么永远都是rejected
监听 Promise 状态改变
我们还可以通过函数来监听状态的变化。
- resolved --> then()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
<script>
let promise = new Promise(function (resolve, reject) {
resolve();
});
promise.then(function () {
console.log("then");
});
promise.catch(function () {
console.log("catch");
});
</script>
</head>
<body>
</body>
</html>
- rejected --> catch()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
<script>
let promise = new Promise(function (resolve, reject) {
reject();
});
promise.then(function () {
console.log("then");
});
promise.catch(function () {
console.log("catch");
});
</script>
</head>
<body>
</body>
</html>
标签:
JS新特性+流行框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具