У меня проблемы с отменой обещания из контекста, отличного от того, в котором было создано обещание. Например, вот как я создаю отменяемое обещание:
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", чтобы она работала так, как я хочу?