Javascript 在外部类对象中访问时,可取消承诺将丢失cancel属性
我在取消承诺时遇到了问题,因为它的上下文与创建承诺时的上下文不同。例如,这就是我创建可取消承诺的方式:Javascript 在外部类对象中访问时,可取消承诺将丢失cancel属性,javascript,promise,Javascript,Promise,我在取消承诺时遇到了问题,因为它的上下文与创建承诺时的上下文不同。例如,这就是我创建可取消承诺的方式: import PCancelable from 'p-cancelable'; class Common { static runPromise(){ const fetchPromise = new PCancelable((resolve, reject, onCancel) => { setTimeout(() => { resolve({ ok:
import PCancelable from 'p-cancelable';
class Common {
static runPromise(){
const fetchPromise = new PCancelable((resolve, reject, onCancel) => {
setTimeout(() => {
resolve({ ok: true, data: [1, 2, 3] });
}, 10000);
onCancel(() => {
console.log('Promise is being canceled');
});
});
console.log(fetchPromise) //PCancelable type
//this works and will cancel the promise
//fetchPromise.cancel();
return fetchPromise;
}
}
然后我尝试从另一个类调用此静态方法,并对其执行如下取消操作:
const promise = Common.runPromise().then().catch();
console.log(promise ) //Promise type - I expect it to be PCancelable
promise.cancel(); //outputs promise.cancel is not a function
当我运行支票时:
console.log(promise)
if返回“Promise”类的实例。而不是像我在原始(公共)类中登录时那样使用“PCancelable”
如何将静态函数“runPromise”的输出强制转换为“PCancellable”,使其按我所希望的方式工作?尝试上面的代码-获得预期的输出 在返回
pccancelable
和调用.cancel
之间,您正在修改promise对象
基本上,在不同的类中使用对象不会更改其构造函数,除非在本例中由您使用的
然后显式或隐式执行。您没有调用runPromise
?是否尝试过:const promise=Common.runPromise();答应。取消()@JoãoOtero是的,我很抱歉,刚刚修正了这个问题。问题仍然在于他们正在调用的p-cancelable示例中。cancel()在等待承诺时。。。如果您在尝试取消它之前等待承诺,它是否有效?我在-,尝试过,效果如预期。你说这行不通的思想共享代码?