Cancelable Promise 是一种特殊的 Promise,它允许你在 Promise 执行过程中取消其操作。通常,Promise 一旦创建并开始执行,就无法被取消,但 Cancelable Promise 提供了这种能力。
在外部类对象中访问 Cancelable Promise 时丢失 cancel
属性,通常是因为 Promise 对象被重新赋值或者传递过程中丢失了其内部的 cancel
方法。
cancel
方法丢失。cancel
方法可能不会被正确复制。class ExternalClass {
constructor() {
this.cancelablePromise = this.createCancelablePromise();
}
createCancelablePromise() {
let cancel;
const promise = new Promise((resolve, reject) => {
// 模拟长时间任务
setTimeout(() => resolve('Task completed'), 5000);
cancel = () => reject(new Error('Task canceled'));
});
return { promise, cancel };
}
runTask() {
this.cancelablePromise.promise.then(console.log).catch(console.error);
}
cancelTask() {
if (this.cancelablePromise.cancel) {
this.cancelablePromise.cancel();
}
}
}
const external = new ExternalClass();
external.runTask();
// 如果需要取消任务
// external.cancelTask();
const deepCopy = (obj) => JSON.parse(JSON.stringify(obj));
class ExternalClass {
constructor() {
this.cancelablePromise = this.createCancelablePromise();
}
createCancelablePromise() {
let cancel;
const promise = new Promise((resolve, reject) => {
// 模拟长时间任务
setTimeout(() => resolve('Task completed'), 5000);
cancel = () => reject(new Error('Task canceled'));
});
return { promise, cancel };
}
runTask() {
const copiedPromise = deepCopy(this.cancelablePromise);
copiedPromise.promise.then(console.log).catch(console.error);
}
cancelTask() {
if (this.cancelablePromise.cancel) {
this.cancelablePromise.cancel();
}
}
}
const external = new ExternalClass();
external.runTask();
// 如果需要取消任务
// external.cancelTask();
cancel
方法在所有环境中都能正常工作。通过上述方法,可以有效避免在外部类对象中访问 Cancelable Promise 时丢失 cancel
属性的问题。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云