Maison > Article > interface Web > Pourquoi Promise.all() se résout-il prématurément avec un tableau de valeurs non définies ?
"Promise.all renvoie un tableau d'indéfinis et se résout avant d'être fait." Ce problème se produit lorsqu'une fonction utilisant Promise.all() renvoie un tableau de valeurs non définies, se résolvant prématurément avant que toutes les promesses du tableau ne soient remplies.
Dans Promises, Promise.all( ) attend un tableau d’objets promis. Un tableau de valeurs non définies est créé ici car le rappel map dans la fonction addText manque de retours Promise.
<code class="js">function addText(queries) { return Promise.all(queries.map(function(query) { // Insert a `return` statement here. models.queries .findById(query.queryId, { raw: true, attributes: ["query"], }) .then(function(queryFetched) { query.text = queryFetched.query; console.log(query); return Promise.resolve(query); }, function(error) { return Promise.reject(error); }); })); };</code>
Sans l'instruction return, le rappel map renverra un tableau de valeurs non définies, déclenchant la résolution de Promise. .all() prématurément, même si les requêtes ne sont pas encore terminées.
Assurez-vous que chaque rappel de carte renvoie une promesse en plaçant le code dans des instructions return.
<code class="js">function addText(queries) { return Promise.all(queries.map(function(query) { return models.queries .findById(query.queryId, { raw: true, attributes: ["query"], }) .then(function(queryFetched) { query.text = queryFetched.query; console.log(query); return Promise.resolve(query); }, function(error) { return Promise.reject(error); }); })); };</code>
Ce faisant, Promise.all() attendra que toutes les promesses du tableau soient résolues avant de se résoudre, garantissant ainsi que l'ensemble du processus se termine avec succès.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!