Promise 的使用

为什么需要 Promise

异步操作的解决方案

在函数内有一个异步操作

js 复制代码
function request() {
    // 模拟异步操作
    setTimeout(() => {
      // 异步执行代码
      ...
    }, 3000);
}

// 调用函数
request()

通常我们会有以下需求:

  • 获取到异步操作的结果;

  • 异步操作结束后执行其他的操作;

这时候我们的解决思路是,定义一个回调函数,在异步操作执行结束后调用

js 复制代码
function request(..., callback) {
    // 模拟异步操作
    setTimeout(() => {
      // 异步执行代码
      
      // 回调函数   
      callback()
    }, 3000);
}

在调用函数时传递回调函数

js 复制代码
request(() => {
    console.log('异步执行结束了');
})

如何使用 Promise

Promise 的基本使用

1. 实例化一个 Promise 对象

js 复制代码
const promise = new Promise((reslove, reject) {
    // 成功执行
    reslove()
    // 失败执行
    reject()
})

2. then 方法

js 复制代码
// then 方法传入两个回调函数
// 第一个回调函数会在 Promise 执行 resolve 函数时被回调
// 第二个回调函数会在 Promise 执行 reject 函数时被回调
promise.then(() => {}, () => {})

Promise 的状态

Promise 对象的状态值有三种

  • pending
  • fulfilled
  • rejected
js 复制代码
new Promise((reslove, reject) => {
    ...
    // pending 待定

    reslove()
    // fulfilled 已完成
    
    reject()
    // rejected 已拒绝
}).then(() => { 

}, () => { 

}) 

默认是 pending 状态,执行 reslove 方法之后就变成 fulfilled 状态,执行 reject 方法之后就变成 rejected 状态。

Promise 的状态一旦确定下来就不能更改了,所以 reslove 方法跟 reject 方法只会触发一个。

相关推荐
程序员大阳6 小时前
副队长JavaScript教程(49)-主动抛出异常与错误类型
javascript·异常处理·error·throw·错误类型
hhhjhl6 小时前
Protobuf.js 跨端三方库仓颉适配全流程
javascript·网络·udp
康小汪6 小时前
AI 写 Vue 总写成同一个味道:给它装 Skills,装的不是知识是边界
前端·vue.js·人工智能·ai编程·最佳实践
智能运维指南7 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
白山编程大哥9 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Flynt10 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
Csvn10 小时前
bundle优化
前端
slongzhang_11 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
北冥有鱼11 小时前
发版后动态路由点击报 `Failed to fetch dynamically imported module`」问题上的完整排查与修复过程
前端·vue.js
静默回滚11 小时前
视频压到 25 MB 以内,码率要算、音轨要扣、余量要留
前端