What could this be about? [TsLint Error: "Promises must be handled appropriately"]
That's a crappy error message. A better one might be,
every expression of type Promise
must end with a call to .catch
or a call to .then
with a rejection handler (source).
So, for example, if you do
PromiseFunction()
.catch(err => handle(err))
.then(() => console.log('this will succeed'))
then you will still have a tslint problem, because the type of .then(...)
is a promise, and it has to end with a catch. The fix would be appending a .catch
clause, for example,
PromiseFunction()
.catch(err => handle(err))
.then(() => console.log('this will succeed'))
.catch(() => 'obligatory catch')
or just disabling tslint for that line via:
PromiseFunction()
.catch(err => handle(err))
// tslint:disable-next-line:no-unsafe-any
.then(() => console.log('this will succeed'))
Alternatively, you could reverse the order of the .then
and .catch
statements. However, that stops the .then
from executing if an error does occur, which you presumably want if you encountered this problem.
Sometimes you might want to call the promise, but you don't need to do anything with the response. A route change or something else.
so instead of:
promiseFunction().then().catch()
try/catch async/await
you can do:
void promiseFunction();
As per the comments on the correct use of void
please read: IgnoreVoid
Use at your own convenience :)
I have got the same exception when i have created firebase-function
using firebase-tool
const ref = admin.database().ref("path/to/database/object");
ref.once("value").catch(error =>{ // line 22
response.send( error() );
}).then( snapshot =>{
response.send( snapshot.val );
})
This code doesn not compiled and return
ERROR: /src/index.ts[22, 5]: Promises must be handled appropriately
I have changed the places of catch
and then
.
ref.once(...).then(...).catch(...)
This code is work, i am sorry but I don't have any explanation
So much amazing when app return the some error without catch
block even according firebase doc
not mentioned that catch
is required.
Your getStatus
function is defined to return a promise:
// All functions marked as async returns a promise:
async function getStatus(message: Message) {/* ... */}
But you called getStatus
without calling it's then:
getStatus(message)
Therefore the compiler thinks you've forgotten to handle your async code. All you need to do is call .then()
:
getStatus(message).then(() => console.log('done'));