NodeJS promet la résolution

const a = [1, 2, 3, 4, 5]; const f = () => new Promise((resolve, reject) => resolve(4)); const g = () => { Promise.all(a.map((member) => f().then((res) => res))) .then((result) => { console.log(result) }); } g(); 

Pourquoi est-ce que je n’ai pas besoin d’un autre attaché à {return res;} ici?

J’ai lu que quand vous avez un return (something) dans un alors, un autre doit then être attaché, mais ce n’est pas le cas ici. Aidez-moi?

Promise.all s’attend à un éventail de promesses. .then retourne une promesse. Par conséquent, votre logique de mappage convertit un tableau de nombres en un tableau de promesses, exactement ce dont vous avez besoin.

.then((res) => {return res;}) est tout à fait inutile, return f(); suffirait. Vous pouvez même simplifier votre code actuel pour:

 Promise.all(a.map(f)).then(result => console.log(result)); 

J’ai lu que lorsque vous avez un return (something) dans un then , un autre doit alors être attaché

Cela n’a rien à voir avec .then . .then retourne simplement une promesse. Pour accéder au résultat d’une promesse, vous devez attacher un gestionnaire via .then .

Vous n’avez pas besoin de faire cela ici, car vous tenez les promesses faites à Promise.all . Vous .then((result)=>{console.log(result)}) ce résultat via .then((result)=>{console.log(result)}) .

Pourquoi est-ce que je n’ai pas besoin d’un autre attaché à {return res;} ici?

J’ai lu que quand vous avez un return (something) dans un alors, un autre doit then être attaché, mais ce n’est pas le cas ici. Aidez-moi?

Il existe un autre .then() attaché à Promise.all() . Voulez-vous dire .catch() doit être attaché pour éviter Uncaught (in promise) ?

Notez aussi que Promise.all() n’est pas return de l’appel g() , pour enchaîner davantage la Promise .

.then() et .catch() au sein d’ .map() rappel .map() peuvent être utilisés pour gérer une erreur ou une Promise rejetée et renvoyer une Promise résolue à .then() chaînée à Promise.all() ; ou de throw l’ Error() actuelle ou nouvelle à l’appel Promise.all() .

Le modèle peut également être utilisé pour renvoyer toutes les promesses passées à .map() , qu’elles soient résolues ou rejetées en .then() , sans appeler immédiatement .catch() Promise.all() à Promise.all()

 function f (index) { return new Promise(function (resolve, reject) { if (index !== 4) resolve(4); else reject("err at index " + index) }) } var a =[1, 2, 3, 4, 5]; function g () { return Promise.all(a.map((member, index)=>{ return f(index).then((res) => {return res;}) .catch(e => {console.log(e); throw new Error(e)}) })) .then((result)=>{console.log(result); return result}) .catch(e => { // handle error here, return resolved `Promise`, // or `throw new Error(e)` to propagate error to // `.catch()` chained to `g()` call console.log("handle error within g", e); return "error " + e.message + " handled"}); } g() .then(data => {console.log(data) /* `error err at 4 handled` */ }) .catch(e => console.log("done", e));