Cancelable Promise теряет свойство отмены при доступе к объекту иностранного класса - PullRequest
0 голосов
/ 17 января 2019

У меня проблемы с отменой обещания из контекста, отличного от того, в котором было создано обещание. Например, вот как я создаю отменяемое обещание:

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", чтобы она работала так, как я хочу?

1 Ответ

0 голосов
/ 17 января 2019

Попытка вышеуказанного кода на - https://repl.it/@sunnykgupta/TryingpCancelable дает ожидаемый результат.

Вы изменяете объект обещания между возвратом PCancelable и вызовом .cancel для этого.

По сути, использование объекта в другом классе не изменит его конструктор, если только в этом случае это не будет сделано явно или неявно с помощью then, который вы использовали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...