Was könnte das etwa sein? [TsLint Fehler: "Versprechen müssen dementsprechend behandelt werden"]
Ich bin dabei einige grundlegende asynchrone Operationen verwenden async/await
in Maschinenschrift, aber TSLint wirft mysteriöse Fehlermeldungen für diese beiden Funktionen unten. Hat jemand diese Fehler auftreten, vor? Am error-Ausgang der EZB-Regel wird nicht genannt, also ich verstehe nicht, was verursacht diese. Irgendwelche Ideen würde sehr geschätzt werden.
Den Haupt-Antrag:
import * as rp from 'request-promise'
export function getRequest(address: rp.Options): rp.RequestPromise {
return rp(address)
}
Exportiert async-Funktion:
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)
}
}
Wird dies: Promises must be handled appropriately
und await of non-Promise
für die Linie #3.
Einfache Funktion, die mithilfe dieser export ist:
client.on('message', message => {
if (message.content === 'green') {
getStatus(message)
}
})
Bekommt diese auch Promises must be handled appropriately
.
Zusätzliche Informationen:
Obwohl die Fehlermeldung erwähnt es nicht, dies scheint die EZB-Regel für Promises must be handled appropriately
:
https://palantir.github.io/tslint/rules/no-floating-promises/
Und dieses Problem erwähnt await of non-Promise
:
https://github.com/palantir/tslint/issues/2661
- Können Sie auch die Funktion getRequest in der Frage, danke.
- Guter Punkt, ich habe es.
- Hier nur raten, aber das könnte sein, dass tslint nicht erkennt, dass die rp-Funktion gibt ein Versprechen. Sie könnten versuchen, Einstellung ein Typ für ihn, export-Funktion getRequest(Adresse: rp.Optionen): Versprechen<alle> { ... Lassen Sie mich wissen, wenn dies funktioniert, so dass ich nicht mehr Zeit verbringen, das überprüft 🙂
- Rückkehr ein Versprechen<alle> Fehler auf der IDE nicht kompatibel zu dem, was tatsächlich zurückgegeben
rp
. So habe ich diese:export function getRequest(address: rp.Options): rp.RequestPromise { return rp(address) }
Dies entspricht das IDE aber ich bin noch immer genau der gleiche Fehler im ersten post.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist eine beschissene Fehlermeldung. Eine bessere sein könnte,
jeder Ausdruck vom Typ
Promise
muss mit einem Aufruf von.catch
oder einen Anruf zu.then
mit einer Ablehnung handler (Quelle).So, zum Beispiel, wenn Sie
dann haben Sie noch die tslint problem, weil die Art der
.then(...)
ist ein Versprechen, und es ist zu Ende mit einem Haken. Der fix wäre das Anhängen eines.catch
- Klausel, zum Beispiel,oder nur das deaktivieren der tslint für die Linie via:
Alternativ können Sie die Reihenfolge der
.then
und.catch
Aussagen. Allerdings hält die.then
ausführen, wenn ein Fehler Auftritt, was Sie vermutlich wollen, wenn Sie diesem problem begegnet.no-floating-promises
Regel und ich Stimme zu, die Fehlermeldung ist nicht so toll. Wenn Sie möchten, senden Sie eine PR mit einer besseren Beschreibung, ich bin alle für es!Manchmal möchten Sie vielleicht zu nennen, das Versprechen, aber Sie brauchen nicht, etwas zu tun mit der Antwort. Eine route ändern oder etwas anderes.
also statt:
können Sie tun:
void
syntaxIhre
getStatus
Funktion definiert ist, um zurückzukehren ein Versprechen:Aber Sie forderte
getStatus
ohne Aufruf ist dann:Daher der compiler denkt, dass Sie vergessen haben, mit Ihren async-code. Alles, was Sie tun müssen, ist Anruf
.then()
:getStatus(message).then(() => console.log('done'))
bekommt nochPromises must be handled appropriately
..catch()
wie gut?getStatus().then().catch()
.catch()
und eintry/catch
für die Anrufung desgetStatus()
immer noch den gleichen Fehler wie mein erstes Kommentar.no-floating-promises
aus. Egal, wie ich behandelt die Fehler, ich war nicht zu befriedigen, die Regel.Hab ich die gleiche Ausnahme, wenn ich Sie erstellt habe
firebase-function
mitfirebase-tool
Dieser code kann nicht kompiliert und
return
Habe ich geändert, die Orte der
catch
undthen
.Dieser code funktioniert, tut mir Leid, aber ich habe keine Erklärung
So viel tolle app, wenn die Rückkehr der einige Fehler ohne
catch
block, auch nachfirebase doc
nicht erwähnt, dasscatch
erforderlich ist.Ich denke, dieses problem ist reparierbar durch die Erwartung der getStatus Funktion, da es ein async-Funktion. Die Botschaft sagt es klar, aber die Nummer der Zeile, führt zu Verwirrung. Um ehrlich zu sein, es brauchte auch ich einige Zeit.
Können Sie lösen diese Fusseln Fehler durch diese änderung im code:
Meiner Meinung nach ist es nicht eine gute Idee, um die Umstellung diese spezifischen Fehler ab. Sie sind nützlich, weil in der anderen Weise, die Sie nicht laufen würde, der code async.