当在外部类对象中访问时,可取消承诺会丢失取消属性

时间:2019-01-17 14:33:44

标签: javascript promise

我无法从与创建承诺的上下文不同的上下文中取消承诺。例如,这就是我创建可取消承诺的方式:

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”(如果我将其记录在original(Common)类中)。

如何将静态函数“ runPromise”的输出强制转换为“ PCancellable”,以使其按我的意愿工作?

1 个答案:

答案 0 :(得分:1)

在-https://repl.it/@sunnykgupta/TryingpCancelable上尝试上面的代码会给我预期的输出。

您正在修改Promise对象的途中,在返回PCancelable和对其调用.cancel之间。

基本上,在不同类中使用对象不会更改其构造函数,除非在这种情况下由您使用过的then进行了显式或隐式完成。