J'ai la fonction suivante. Il obtient un tableau d'attributs et les itère en boucle pour placer chaque attribut dans une base de données. Mais la boucle sera tué automatiquement avec la déclaration await
:Pourquoi "attendre" casser ou tuer une boucle for-moderne en Javascript?
async function importAttributeRecords(attributeValues, languageId, attributes, dataStorage, tx) {
for(let attr of attributes) {
console.log("Persist", attr)
try {
await importAttributeRecord(attributeValues, languageId, attr, dataStorage, tx)
}
catch(err) {
console.log(err);
}
console.log("After persisting");
}
}
Le premier appel à await
sera exécuté, mais la deuxième déclaration console.log
après il ne sera jamais apparaître. En outre, la boucle sera fermée immédiatement.
Comment puis-je exécuter une fonction comme mon importAttributeRecord()
dans une boucle de façon synchrone, même si elle renvoie une promesse? Et pourquoi l'utilisation de "await" est-elle dangereuse pour les boucles?
Voulez-vous dire par le second appel de journal celui qui sort: '" Après avoir persisté "'? Une exception est-elle levée? – k0pernikus
A besoin de plus [mcve]. – melpomene
La boucle n'est pas supprimée. Il est mis en attente et reprendra lorsque vous «attendez» la promesse. Les promesses sont asynchrones. Vous ne pouvez pas les traiter comme synchrones. –