Для тех, кто интересуется, как заставить это работать изначально без каких-либо прокладок: начиная с TS 2.7 это возможно.
Обратите внимание, что TS 2.7 еще не полностью (26 февраля 2018 г.) совместим с ES2018. Несмотря на то, что все еще есть несколько вещей, отсутствует, Promise.наконец-то попал в версию 2.7. Также tsconfig-schema уже должна принимать ES2018 в качестве цели, но пока TS 2.7 не знает ES2018. На данный момент, чтобы использовать новые функции, такие как Promise.finally, которые уже есть в версии 2.7, вам придется использовать "target": "ESNEXT"
в файле tsconfig.json.
Тогда вы сможете написать такой код:
myAsyncFunction().then
(
(var) => console.log("executing then. " + var)
)
.catch
(
(var) => console.log("executing catch. " + var)
)
.finally
(
() => console.log("executing finally.")
)
Обратите внимание, что finally не принимает никаких аргументов в силу своей природы.
ВАЖНО: хотя TS будет правильно транспилировать и понимать, что вы делаете, вам все равно нужно проверить, поддерживает ли ваш JS-движок Promise.finally. В моем случае я использовал NodeJs 8.x, и, конечно же, созданный JS не был исполняемым, потому что Promise.Finally поддерживается, начиная с , в последних ночных сборках NodeJs 10.x Node 10.x (стабильная), см. эту ссылку.
person
omni
schedule
26.02.2018