let val = 0;
async function first() {
console.log('1a', val);
second();
console.log('1b', val);
}
async function second() {
console.log('2a', val);
third();
console.log('2b', val);
}
async function third() {
console.log('3a', val);
val = await new Promise(function (resolve, reject) {
setTimeout(function() {
resolve(3);
}, 1000);
});
console.log('3b', val);
}
console.log('0a', val);
first();
console.log('0b', val);
Ich erwarte:Asynchrone Funktionen verketten?
0a 0
1a 0
2a 0
3a 0
3b 3
2b 3
1b 3
0b 3
Aber ich erhalte:
0a 0
1a 0
2a 0
3a 0
2b 0
1b 0
0b 0
3b 3
Ich vermute, es eine grundlegende Sache über async ist, die ich nicht bewusst bin?
Nur 'third' ist' await'ing das Ergebnis eines Versprechens, alle anderen Funktionen synchron ausführen. Es sei denn, Sie erwarten zuerst und zweitens, sie werden sofort zurückkehren. – deceze
Nun, ich weiß nicht viel über 'erwarten' und' async', aber der Timeout-Teil erlaubt grundsätzlich den Rest des Codes zu beenden, während der 'wartet' wartet, bis die Zeitüberschreitung beendet ist. (oder genauer gesagt, um das 'Versprechen' zu beenden) – musefan
Warte, welche Version von nodejs unterstützt diese Syntax sogar? Ich habe mit v6.8.1 versucht und es wirft einen Syntaxfehler. – freakish