0
votes

Comment attendre 2 des promesses de promesse.Tous la fin de la fin et de faire une autre tâche

Je développe actuellement un programme dans lequel je dois utiliser la promesse.Tous utiliser quelques fonctions en même temps. Mais avant que je puisse continuer avec la tâche, je n'ai besoin que de 2 des promesses de finition, puis de courir le .Chen (), comment allez-moi faire cela?

Exemple: P>

await Promise.all([Task1(),Task2(),Task3(),Task4(),Task5()]);


8 commentaires

Peut-il être tout deux?


@ T.J.Qurowder Il s'agit de 2 promesses spécifiques, vient de choisir au hasard pour l'exemple.


Alors pourquoi ne pas passer seulement deux fonctions au lieu des quatre?


@Samh - Encore une fois, peut-il être tout deux (par exemple, les deux premiers qui finissent)? Ou avez-vous deux spécifiquement à l'esprit?


La mission était de courir toutes les 5 tâches en même temps en utilisant la promesse.Tous (parce qu'elles prennent le temps de finir, des secondes), parfois certaines tâches pourraient prendre plus de temps que d'autres, c'est pourquoi je veux toujours continuer à attendre les autres promesses tout en continuant avec une autre tâche lorsque la tâche1 et la tâche4 ont terminé. @ T.J.Crowderder


@Samh - il est donc spécifiquement tâche 1 et 4?


@ T.J.Crowder Well Task1 et Task4 est juste un exemple, mais oui, c'est spécifiquement 2 tâches que je dois attendre, pas des tâches aléatoires, mais 2 tâches spécifiques qui renvoient des résultats spécifiques.


@Samh - "juste un exemple" rend les choses incertaines. Si vous savez à l'avance, ce qui est, c'est le point clé pour préciser.


5 Réponses :


0
votes

promess.all () n'exécute pas vos tâches simultanément, il n'attend que toutes les promesses de résolution avant de résoudre la promesse retournée.

Vos tâches seront courues dès que vous créez chaque promesse .

Si vous souhaitez attendre après des tâches spécifiques, n'incluez que ces tâches dans promess.all : xxx


0 commentaires

1
votes

Une façon de le faire consiste à construire une nouvelle gamme des promesses randomisées, puis attendez celles seulement:

let array = [Task1(),Task2(),Task3(),Task4(),Task5()];

// Select any two promises after running the randomization logic
let promises = Promise.all[array[1], array[3]];

promises
  .then(() => {
    // Do stuff here
  });


0 commentaires

0
votes

J'ai vu des tours comme ceci: promess.all (promettes.map (p => p. (() => non défini))); Assez dangereux cependant.
Réponse originale: ici


0 commentaires

3
votes

Dans un commentaire, vous semblez avoir dit que vous saviez spécifiquement que, à l'avance, que deux sont plus urgents que le reste (et que dans cet exemple, c'est Task1 et Task4).

Il suffit d'utiliser prometteur.Tous code> deux fois: p> xxx pré>

là-bas, j'ai préservé les commandes 1, 2, 3, 4, 5 de l'ordre dans la chaîne extérieure en remappage de l'ordre dans le Globalement alors code> gestionnaire. p>


À l'origine, j'ai supposé que vous vouliez attendre TOUT STRAND> Deux ont terminé, plutôt que deux spécifiques. Il n'y a pas d'intégré pour cela, mais il est assez facile d'écrire: p> xxx pré>

Exemple live: p>

p>

function enough(promises, min) {
  if (typeof min !== "number") {
    return Promise.all(promises);
  }
  let counter = 0;
  const results = [];
  return new Promise((resolve, reject) => {
    let index = 0;
    for (const promise of promises) {
      let position = index++;
      promise.then(
        result => {
          results[position] = result;
          if (++counter >= min) {
            resolve(results);
          }
        },
        reject
      );
    }
  });
}

const delay = (ms, ...args) => new Promise(resolve => setTimeout(resolve, ms, ...args));
const rnd = () => Math.random() * 1000;

enough(
  [
    delay(rnd(), "a"),
    delay(rnd(), "b"),
    delay(rnd(), "c"),
    delay(rnd(), "d"),
    delay(rnd(), "e")
  ],
  2
)
.then(results => {
  console.log(results);
})
.catch(error => {
  console.error(error);
});


0 commentaires

0
votes

OK, comme je vous comprends, vous voulez faire quelque chose comme xxx


0 commentaires