Javascript Обещания, если мне пришлось чрезмерно упрощать, на мой взгляд, «способ действовать на вещи» позже , запланированный с помощью метода .then()
».
После выполнения следующих действий в моемтерминал:
BASE$> node
> var promise = Promise.reject("reason 42");
Поэтому я был удивлен, увидев этот результат:
> (node:8783) UnhandledPromiseRejectionWarning: reason 42
(node:8783) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:8783) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
, потому что я собирался написать.
> promise.catch(console.log);
Мотивация этого вопроса заключается в следующем:
Могу ли я быть достаточно уверенным, что node.js
только извлекает из этого предупреждения (и угрозы «в будущем я полностью спасу» из-закод выполняется пошагово в консоли node.js / REPL ?
Как node.js
уже пришел к выводу, что отказ от обещания должен был быть обработан?
Поэтому я проверил следующее, чтобы работать по-разному
- Оценка "одного и того же кода", объединенного в одной итерации REPL:
var promise = Promise.reject("reason 42"); promise.catch(console.log);
- Оценка "того же кода" изфайл (например,
tmp.js
) с содержимым var promise = Promise.reject("reason 42")
promise.catch(console.log);`)
через node tmp.js
, оба с ожидаемым выводом "reason 42
", не выдавая никакого предупреждения, как показано выше.
Следовательно, как это работает? Можно ли подтвердить мое предположение, что определение необработанного обещания в консоли узла REPL
отражает отражение достижения в каждой итерации цикла REPL
?