JavaScript Opérations asynchrones (parallèles) simultanées


Exemple

Souvent, vous souhaiterez effectuer des opérations asynchrones en parallèle. Il y a syntaxe directe qui prend en charge ce dans le async / await proposition, mais depuis await attendra une promesse, vous pouvez envelopper plusieurs promesses ensemble dans Promise.all à attendre pour eux:

// Not in parallel

async function getFriendPosts(user) {
    friendIds = await db.get("friends", {user}, {id: 1});
    friendPosts = [];
    for (let id in friendIds) {
        friendPosts = friendPosts.concat( await db.get("posts", {user: id}) );
    }
    // etc.
}

Cela fera chaque requête pour obtenir les messages de chaque ami en série, mais ils peuvent être faits simultanément:

// In parallel

async function getFriendPosts(user) {
    friendIds = await.db.get("friends", {user}, {id: 1});
    friendPosts = await Promise.all( friendIds.map(id => 
      db.get("posts", {user: id})
    );
    // etc.
}

Cela fera une boucle sur la liste des identifiants pour créer un tableau de promesses. await attendra toutes promet d'être complète. Promise.all combine en une seule promesse, mais elles se font en parallèle.