专业的编程技术博客社区

网站首页 > 博客文章 正文

碎片时间学编程「21]:异步 JavaScript 备忘总结

baijin 2024-09-27 06:42:48 博客文章 5 ℃ 0 评论

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) {
// 此处处理错误逻辑
}
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表