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()]);
5 Réponses :
Vos tâches seront courues dès que vous créez chaque promesse . P> Si vous souhaitez attendre après des tâches spécifiques, n'incluez que ces tâches dans promess.all () code> 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.
promess.all code>: p>
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 });
J'ai vu des tours comme ceci:
promess.all (promettes.map (p => p. (() => non défini))); code>
Assez dangereux cependant.
Réponse originale: ici P>
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 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 À l'origine, j'ai supposé que vous vouliez attendre Exemple live: p> p> prometteur.Tous code> deux fois: p>
alors code> gestionnaire. 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);
});
OK, comme je vous comprends, vous voulez faire quelque chose comme
Peut-il être tout i> 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 i> 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 b> 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.