我无法从与创建承诺的上下文不同的上下文中取消承诺。例如,这就是我创建可取消承诺的方式:
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”,以使其按我的意愿工作?
答案 0 :(得分:1)
在-https://repl.it/@sunnykgupta/TryingpCancelable上尝试上面的代码会给我预期的输出。
您正在修改Promise对象的途中,在返回PCancelable
和对其调用.cancel
之间。
基本上,在不同类中使用对象不会更改其构造函数,除非在这种情况下由您使用过的then
进行了显式或隐式完成。