Прекращение обещания из любого местаJavascript

Форум по Javascript
Ответить
Anonymous
 Прекращение обещания из любого места

Сообщение Anonymous »

Я хочу отменить обещание на основе сигнала, которым можно управлять чем угодно — эффективно отменяя обещание через событие.
Единственное допустимое решение, с которым я столкнулся до сих пор, — это просто постоянно проверять, является ли сигнал, который я слушаю, ложным — это можно замаскировать, обернув проверку в вызов функции. В противном случае создается впечатление, что NodeJS не может завершить функцию.
Я надеялся использовать решение, синтаксически похожее на следующее:

Код: Выделить всё

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

new Promise(async (resolve, reject) => {
try {
console.log(1);
sleep(1000).then(() => {throw new Error("hi")}); // some arbitrary time until the signal is activated
await sleep(2000); // some long running task(s)
console.log(2);
} catch(e) {reject(e)};
}).catch(() => console.log("caught"));
Я надеялся, что это (и вариант без try) сработает, но я думаю, что из-за того, как ошибки обрабатываются в стеке вызовов, он фактически не прекращает выполнение обещания.
Существует ли элегантный метод отмены/завершения/прерывания обещания в середине его выполнения?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... m-anywhere
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»