Je suis curieux de convertir la syntaxe async/attendre la syntaxe Promise
s. Peut-être que je ne pense pas à cela correctement, mais je ne sais pas comment ce code serait converti en une promesse:
async function myFunc(doAwait) {
doSomething();
if (doAwait) {
await doSomethingAsync();
}
return doSomethingElse();
}
Lorsque doAwait
est false
, je m'attendrais à ce que cette fonction soit équivalente à:
return new Promise(res => {
doSomething();
res(doSomethingElse());
});
Si c'est true
, ce serait:
return new Promise(() => { doSomething(); })
.then(() => doSomethingAsync())
.then(() => doSomethingElse());
Cela pourrait faire quelque chose comme:
let p = new Promise(() => { doSomething(); });
if (doAwait) {
p = p.then(() => doSomethingAsync());
}
return p.then(() => doSomethingElse());
Mais cela introduit un supplément, éventuellement inutile then
. Peut-être que c'est juste inévitable.
Cette async/await
code:
async function myFunc(doAwait) {
doSomething();
if (doAwait) {
await doSomethingAsync();
}
return doSomethingElse();
}
Serait fondamentalement équivalent à ceci:
function myFunc(doAwait) {
doSomething();
if (doAwait) {
return Promise.resolve(doSomethingAsync()).then(doSomethingElse);
}
return Promise.resolve(doSomethingElse());
}
Pour une équivalence complète, y compris des exceptions synchrones dans l'une quelconque des appels de fonctions, ce serait quelque chose comme ceci:
function myFunc(doAwait) {
try {
doSomething();
if (doAwait) {
return Promise.resolve(doSomethingAsync()).then(doSomethingElse);
}
return Promise.resolve(doSomethingElse());
} catch(e) {
return Promise.reject(e);
}
}