Asynchrone Funktion, die das Versprechen anstelle des Werts zurückgibt
Lesezeit: 3 Minuten
Ich versuche zu verstehen, wie async/await in Verbindung mit Versprechungen funktioniert.
Code
async function latestTime() {
const bl = await web3.eth.getBlock('latest');
console.log(bl.timestamp); // Returns a primitive
console.log(typeof bl.timestamp.then == 'function'); //Returns false - not a promise
return bl.timestamp;
}
const time = latestTime(); // Promise { <pending> }
Problem
Soweit ich weiß, sollte await blockieren und im obigen Code scheint es die Rückgabe eines Objekts zu blockieren bl mit dem Primitiven timestamp. Dann gibt meine Funktion den primitiven Wert zurück, die Zeitvariable wird jedoch auf ein ausstehendes Versprechen anstelle dieses Primitivs gesetzt. Was vermisse ich?
das ist es, was asynchrone Funktionen tun – lesen Sie die spez
– Jaromanda X
14. Juli 2018 um 12:00 Uhr
await should be blocking nein – das Blockieren von Code in Javascript ist eine “schlechte Idee”™ und async/await hat überhaupt nichts mit Blockieren zu tun
– Jaromanda X
14. Juli 2018 um 12:01 Uhr
Jedenasync function gibt ein Versprechen zurück, so dass Sie es darin können await andere Versprechungen, das ist der springende Punkt
– Bergi
14. Juli 2018 um 12:02 Uhr
Beantwortet das deine Frage? async/await gibt implizit das Versprechen zurück?
– Ivar
17. Juli 2021 um 21:28 Uhr
Async-Präfix ist eine Art Wrapper für Promises.
async function latestTime() {
const bl = await web3.eth.getBlock('latest');
console.log(bl.timestamp); // Returns a primitive
console.log(typeof bl.timestamp.then == 'function'); //Returns false - not a promise
return bl.timestamp;
}
Ist das gleiche wie
function latestTime() {
return new Promise(function(resolve,success){
const bl = web3.eth.getBlock('latest');
bl.then(function(result){
console.log(result.timestamp); // Returns a primitive
console.log(typeof result.timestamp.then == 'function'); //Returns false - not a promise
resolve(result.timestamp)
})
}
Vielen Dank für die beschreibende Antwort, ich habe offensichtlich den Punkt verfehlt.
– Benutzer3223162
14. Juli 2018 um 12:19 Uhr
Nur eine Randnotiz: Es gibt ein paar Probleme mit dieser Übersetzung von async Funktion. Es ist in sehr allgemeiner konzeptioneller Hinsicht in Ordnung, behandelt die Ablehnung jedoch nicht korrekt, hat einen Syntaxfehler und gibt einen sehr überraschenden Namen (success?!) auf das zweite Argument, das an den Promise Executor übergeben wird (die Funktion, die verwendet werden soll ablehnen das Versprechen)… 🙂
– TJ Crowder
19. August 2020 um 12:50 Uhr
TJ Crowder
Ein async Die Funktion gibt immer ein Promise zurück. So meldet es den Abschluss seiner asynchronen Arbeit. Wenn Sie es in einem anderen verwenden async Funktion, die Sie verwenden können await zu warten, bis sich sein Versprechen erfüllt, aber in einer nichtasync Funktion (häufig auf der obersten Ebene oder in einem Event-Handler), müssen Sie das Promise direkt verwenden, z.
das ist es, was asynchrone Funktionen tun – lesen Sie die spez
– Jaromanda X
14. Juli 2018 um 12:00 Uhr
await should be blocking
nein – das Blockieren von Code in Javascript ist eine “schlechte Idee”™ und async/await hat überhaupt nichts mit Blockieren zu tun– Jaromanda X
14. Juli 2018 um 12:01 Uhr
Jeden
async function
gibt ein Versprechen zurück, so dass Sie es darin könnenawait
andere Versprechungen, das ist der springende Punkt– Bergi
14. Juli 2018 um 12:02 Uhr
Beantwortet das deine Frage? async/await gibt implizit das Versprechen zurück?
– Ivar
17. Juli 2021 um 21:28 Uhr