Ce pourrait-il être? [TsLint d'Erreur: “les Promesses doivent être manipulés de façon appropriée”]
Je fais une base d'opérations asynchrones à l'aide de async/await
en caractères d'imprimerie, mais TSLint est en train de jeter de mystérieux messages d'erreur pour ces deux fonctions ci-dessous. Quelqu'un a rencontré ces erreurs avant? Sur la sortie d'erreur, le conseil de la règle n'est pas mentionné, donc je ne comprends pas ce qui est à l'origine de ces. Toutes les idées seraient grandement appréciés.
De la requête principale:
import * as rp from 'request-promise'
export function getRequest(address: rp.Options): rp.RequestPromise {
return rp(address)
}
Exporté fonction async:
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)
}
}
Cela devient: Promises must be handled appropriately
et await of non-Promise
pour la ligne n ° 3.
La fonction simple qui utilise cette exportation est:
client.on('message', message => {
if (message.content === 'green') {
getStatus(message)
}
})
Cette obtient également Promises must be handled appropriately
.
Informations supplémentaires:
Même si le message d'erreur n'est pas mentionné, ce qui semble être la règle principale pour Promises must be handled appropriately
:
https://palantir.github.io/tslint/rules/no-floating-promises/
Et cette Question mentionne await of non-Promise
:
https://github.com/palantir/tslint/issues/2661
Grand point, je l'ai ajouté.
Juste deviner ici, mais peut être que tslint ne pas reconnaître que le rp fonction renvoie une promesse. Vous pourriez essayer de définir un type pour lui, la fonction d'exportation getRequest(adresse: rp.Les Options): Promesse<aucun> { ... Laissez-moi savoir si cela fonctionne si je ne passe pas plus de temps à vérifier 🙂
De retour d'une Promesse<aucun> erreurs sur l'IDE de ne pas être compatible avec ce qui est en fait retourné par
rp
. J'ai donc utilisé ce: export function getRequest(address: rp.Options): rp.RequestPromise { return rp(address) }
, Ce qui remplit les IDE, mais je suis toujours avoir exactement les mêmes erreurs dans le post initial.
OriginalL'auteur cinnaroll45 | 2017-05-15
Vous devez vous connecter pour publier un commentaire.
C'est une merde message d'erreur. Un meilleur peut-être,
toute expression de type
Promise
doit se terminer par un appel à.catch
ou un appel à.then
avec un rejet de gestionnaire (source).Ainsi, par exemple, si vous ne
ensuite, vous aurez toujours un tslint problème, parce que le type de
.then(...)
est une promesse, et il a à la fin, avec une prise. La solution serait l'ajout d'un.catch
clause, par exemple,ou simplement en désactivant le tslint pour cette ligne par:
Alternativement, vous pouvez inverser l'ordre de la
.then
et.catch
consolidés. Cependant, cela s'arrête la.then
de l'exécution si une erreur se produit, vous voulez sans doute si vous avez rencontré ce problème.no-floating-promises
la règle et je suis d'accord le message d'erreur n'est pas génial. Si vous voulez faire un RP avec une meilleure description que je suis tout pour elle!OriginalL'auteur Clever Little Monkey
Votre
getStatus
fonction est définie pour retourner une promesse:Mais vous avez appelé
getStatus
sans appel, c'est alors:Donc le compilateur pense que vous avez oublié de traiter votre code asynchrone. Tout ce que vous devez faire est d'appeler
.then()
:getStatus(message).then(() => console.log('done'))
obtient toujoursPromises must be handled appropriately
.Avez-vous essayé la manipulation de la
.catch()
ainsi?getStatus().then().catch()
Ouais, essayé de bot
.catch()
et untry/catch
de l'invocation de lagetStatus()
encore la même erreur que mon premier commentaire.avez-vous été en mesure de résoudre ce problème? J'ai aussi eu le même problème et impossible de le résoudre
Je downvoted parce que c'est tout simplement faux, tslint est à la recherche d'une capture ou d' .puis, avec le rejet de gestionnaire.
OriginalL'auteur slebetman
Parfois, vous voudrez peut-être appeler la promesse, mais vous n'avez pas besoin de faire quoi que ce soit avec la réponse. Un changement d'itinéraire ou quelque chose d'autre.
ainsi, au lieu de:
que vous pouvez faire:
OriginalL'auteur T04435
Je pense que ce problème est réparable par l'attente de la getStatus fonction, depuis sa une fonction async. Le message dit clairement, mais le numéro de la ligne provoque de la confusion. Pour être honnête, il m'a également pris un certain temps.
Vous pouvez résoudre ce charpie erreur par ce changement de code:
C'est à mon avis pas une bonne idée de mettre ces erreurs spécifiques à l'arrêt. Ils sont utiles, car dans l'autre sens, vous ne serait pas exécuter le code asynchrone.
OriginalL'auteur Crix
J'ai eu la même exception lorsque j'ai créé
firebase-function
à l'aide defirebase-tool
Ce code n'est pas compilé et
return
J'ai changé les lieux de
catch
etthen
.Ce code est de travailler, je suis désolé mais je n'ai pas d'explication à
Tellement étonnant lorsque l'application le retour à l'erreur sans
catch
bloc, même selonfirebase doc
pas mentionné quecatch
est nécessaire.OriginalL'auteur Vahe Gharibyan