网站首页 > 博客文章 正文
Promise 基础
Promise 以待处理状态开始,既不履行也不拒绝。
当操作完成时,一个 promise 将被一个 value 实现。
如果操作失败,promise 将被拒绝并返回错误。
创建 Promise
传递给 Promise 构造函数将同步执行。
使用 resolve() 或 reject() 函数从值创建 Promise。
Promise.resolve(val) 将兑现Promise val。
Promise.reject(err) 将 err 拒绝.
如果把一个已履行的Promise放入一个已履行的 Promise 中,它们就会合二为一。
new Promise((resolve, reject) => {
performOperation((err, val) => {
if (err) reject(err);
else resolve(val);
});
});
//无需值返回,无需值拒绝
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
处理 Promise
Promise.prototype.then() 接受两个可选参数 ( onFulfilled, onRejected)。
Promise.prototype.then() 承诺一旦实现就会调用 onFulfilled 。
Promise.prototype.then() 如果 promise 被拒绝,将调用 onRejected。
Promise.prototype.then() 如果 onRejected 为 undefined ,将返回错误。
Promise.prototype.catch() 接受一个参数 ( onRejected)。
Promise.prototype.catch() 行为与 Promise.prototype.then() 触发 whenonFulfilled 时类似。
Promise.prototype.catch() 传递已实现的值。
Promise.prototype.finally() 接受一个参数 ( onFinally)。
Promise.prototype.finally() 一旦有任何结果可用,就调用不带参数的 onFinally 。
Promise.prototype.finally() 通过输入承诺。
promisedOperation()
.then(
val => value + 1, // 完成承诺后调用
err => { // 如果 promise 被拒绝则调用
if (err === someKnownErr) return defaultVal;
else throw err;
}
)
.catch(
err => console.log(err); //如果 promise 被拒绝则调用
)
.finally(
() => console.log('Done'); //有任何结果可用时调用
);
上述所有三种方法至少要等到下一个刻才会执行,即使对于已经有结果的 Promise 也是如此。
结合 Promise
Promise.all() 将一个 promise 数组变成一个数组的 promise。
如果任何承诺被拒绝,将返回错误。
Promise.race() 通过第一个已确定的承诺。
Promise
.all([ p1, p2, p3 ])
.then(([ v1, v2, v3 ]) => {
//值总是按承诺的顺序响应
// 不是他们解决的顺序(即 v1 对应于 p1)
});
Promise
.race([ p1, p2, p3 ])
.then(val => {
// val 将采用第一个已解决的承诺的值
})
异步/等待
调用 async 函数总是会产生一个承诺。
(async () => value)() 将返回 value。
(async () => throw err)() 将拒绝错误。
await 等待一个 promise 被实现并返回它的值。
await 只能在 async 函数中使用。
await 也接受非承诺值。
await 即使在等待已经履行的承诺或非承诺值时,也总是至少等到下一个应答才解决。
async () => {
try {
let val = await promisedValue();
//此处处理业务逻辑
} catch (err) {
// 此处处理错误逻辑
}
}
猜你喜欢
- 2024-09-27 搞懂ES6语法之promise-那些常用姿势
- 2024-09-27 抢先熟悉ES2021新特性(es2021 新特性)
- 2024-09-27 JavaScript: Promises 介绍及为何 Async/Await 最终取得胜利
- 2024-09-27 种草 ES2020 八大新功能(es2020特性)
- 2024-09-27 async异步操作函数(async await异步请求)
- 2024-09-27 nodejs入门教程之Promise(十)(nodejs.)
- 2024-09-27 【JavaScript】ES6之Promise用法详解及其应用
- 2024-09-27 JavaScript,ES11,Promise.allSettled,返回一个Promise对象
- 2024-09-27 JavaScript中的Promise:异步编程的利器
- 2024-09-27 [那些被问烂的前端面试题]-手写Promise有什么含金量与考点?
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)