【対処方法】[ESLint]Promises must be handled appropriately or explicitly marked as ignored with the `void` operator
エラー内容
TypeScriptでasync/awaitを使った基本的な非同期処理を行っているのですが、TSLintが以下の2つの関数に対して謎のエラーメッセージを投げてきます。
誰かこのようなエラーに遭遇したことはありますか?
エラー出力ではルールが言及されていないので、何が原因なのか理解できません。
何かアイデアがあれば、非常にありがたいです。
import * as rp from 'request-promise' export function getRequest(address: rp.Options): rp.RequestPromise { return rp(address) }
export async function getStatus(message: Message) { try { const res = await getRequest(address) if (res.ready) { message.reply('...') } else { message.reply('...') } } catch (err) { message.reply(err) } }
これは得です。プロミスは適切に処理されなければならず、3行目の非プロミスの待ち受けになります。
このエクスポートを使用する単純な関数は以下です。
client.on('message', message => { if (message.content === 'green') { getStatus(message) } })
これは、プロミスが適切に処理されなければならないことを意味します。
回答
これはひどいエラーメッセージです。もっと良いものは、次のようなものです。
Promise型のすべての式は、.catchまたは.thenの呼び出しと拒否ハンドラで終わらなければなりません。
PromiseFunction() .catch(err => handle(err)) .then(() => console.log('this will succeed'))
というのも、.then(...)の型は約束であり、catchで終わらなければならないからです。修正方法は、例えば、.catch節を追加することです。
PromiseFunction() .catch(err => handle(err)) .then(() => console.log('this will succeed')) .catch(() => 'obligatory catch')
または、そのラインを経由して tslint を無効にします。
PromiseFunction() .catch(err => handle(err)) // tslint:disable-next-line:no-unsafe-any .then(() => console.log('this will succeed')