0
votes

Chaîne promesse JavaScript ne pas exécuter ensuite ensuite ()

Voici mon exemple de code:

function recursiveFetch(num) {
    // EXAMPLE that recursivley fetches all todos from example API
    return new Promise(resolve => {
        fetch("https://jsonplaceholder.typicode.com/todos/" + num)
            .then((response) => {
                return response.json();
            })
            .then((data) => {
                if (num == 0) {
                    console.log("Done getting TODOs");
                    resolve(num);
                } else {
                    recursiveFetch(num - 1);
                }
            });
    });
}

new Promise(resolve => {
        // Just using this for this example
        resolve(10);
    })
    .then((num) => {
        // This runs fine and returns a promise which is eventually resolved
        return recursiveFetch(num);
    })
    .then((num) => {
        // This never happens?
        console.log("num is now " + num);
    })


5 commentaires

Essayez d'ajouter un .Catch pour voir s'il y a des erreurs. (Aussi, mieux pour éviter la promesse explicite de la construction antiparatère). Vous n'appelez pas non plus résoudre dans le sinon , la promesse sera suspendue pour toujours dans ce cas


Il n'est pas nécessaire de créer une nouvelle promesse avec Fetch


@ Daniela.white si je supprimais la nouvelle promesse ligne et le résolve , je reçois cette sortie: num est maintenant non défini Todos , comme s'il ne fait que sauter le fait que c'est une promesse


Oui, selon avec Daniel A. White ... Fetch est une promesse Par défaut ... Il n'est pas nécessaire de faire une promesse d'une autre promesse.


Il suffit de garder retour ing


3 Réponses :


0
votes

Vous devez retourner la récursoirfetch dans la promesse interne xxx


0 commentaires

1
votes

Pour corriger votre code tel qu'il est, vous avez besoin

async function fetchAll(num) {
  let data = [];
  for (let i = 1; i <= num; i++) {
    let t = await fetch("https://jsonplaceholder.typicode.com/todos/" + i);
    data.push(await t.json())
  }
  return data;
}

Promise
  .resolve(3)
  .then(fetchAll)
  .then(console.log)


0 commentaires

1
votes

Vous devez ajouter une résolution à l'intérieur de «autre» lorsque vous appelez de la fonction de la fonction «RécursiveFecTH». Étant donné que la fonction renvoie une autre promesse que vous devez résoudre puis, sinon il quittera immédiatement.

Je l'ai essayé et cela fonctionne: P>

function recursiveFetch(num) {
    // EXAMPLE that recursivley fetches all todos from example API
    return new Promise(resolve => {
        fetch("https://jsonplaceholder.typicode.com/todos/" + num)
            .then((response) => {
                return response.json();
            })
            .then((data) => {
                if (num == 0) {
                    console.log("Done getting TODOs");
                    resolve(num);
                } else {
                    resolve(recursiveFetch(num - 1));
                }
            });
    });
}

new Promise(resolve => {
        // Just using this for this example
        resolve(10);
    })
    .then((num) => {
        // This runs fine and returns a promise which is eventually resolved
        return recursiveFetch(num);
    })
    .then((num) => {
        // This never happens?
        console.log("num is now " + num);
    })


0 commentaires