返回
手把手教你用原生语法写 Promise,扫除概念迷雾!
前端
2023-11-18 00:41:33
何为 Promise?
一个 Promise 代表一个异步计算的结果。它为异步编程提供了结构化和简化的范例,让你告别繁琐的回调,在异步的世界里如鱼得水。
手写一个 Promise
首先,创建一个构造器类:
class Promise {
constructor(callback) {
this.status = "pending";
callback(this._resolve, this._rejection);
}
_resolve = value => {
if (this.status !== "pending") return;
this.status = "fulfilled";
this.value = value;
this.onFulfill && this.onFulfill(value);
};
_rejection = reason => {
if (this.status !== "pending") return;
this.status = "rejected";
this.error = reason;
this.onReject && this.onReject(error);
};
then(onFulfill, onReject) {
if (this.status === "pending") {
this.onFulfill = onFulfill;
this.onReject = onReject;
} else if (this.status === "fulfilled") {
onFulfill(this.value);
} else if (this.status === "rejected") {
onReject(this.error);
}
}
}
接着,生成 Promise 实例:
const promise = new Promise(resolve => {
// 异步获取数据,并调用
// promise.resolve(data)
// or
// promise.rejection(err)
});
小试牛刀
现在,我们手写一个简易的 Promise:
const myAsyncFunction = async () => {
try {
const data = await new Promise(resolve => {
// 进行异步计算
resolve(data);
});
// 处理 data
} catch (err) {
// 处理 err
}
};
总结
手写 Promise 的旅途,不仅让你领略了 Promise 的内在,也让你对异步编程有了更深的认识。而真正的奥妙,还需在日复一日的编码中感悟,让每一次的思索,都化作编程道路上熠熠生辉的明灯。