В своем коде вы передаете уже полное (отклоненное) обещание функции. И cancel=Promise.resolve();
после attempting cancellation of promise
не будет иметь никакого эффекта для обещания, которое было передано example
, потому что вы просто создаете новое разрешенное Обещание.
Если вы хотите отменить запущенный процесс, вы можете выбрать такое решение:
function example(helper) {
return new Promise((resolve, reject) => {
helper.cancel = function() {
clearTimeout(timer)
reject('cancelled');
}
const timer = setTimeout(() => resolve('jack-jack'), 5000);
});
}
var helper = {};
example(helper).then((res) => console.log('res handled:' + res)).catch((err) => console.log('err handled:' + err));
console.log('attempting cancellation of promise');
helper.cancel()