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()在等待承诺时。。。如果您在尝试取消它之前等待承诺,它是否有效?我在-,尝试过,效果如预期。你说这行不通的思想共享代码?