如何等待所有动态嵌套承诺结束?

哈维·奥尔伯斯

我有以下代码:

  getContent() {

    fetch(this.url)
    .then((response) => response.text())
    .then((data) => {
      let jsonData = JSON.parse(data);

      for (let i=0; i<jsonData.results.length; i++) {

        this.fetchPokemon(jsonData.results[i].url)
        .then(() => console.log("end"));
      }

      console.log(calls);
    })
    .catch((error) => console.log(error));
  }

  fetchPokemon(url) {
    return new Promise((resolve) => {
      fetch(url)
      .then((response) => response.text())
      .then((data) => {
        let jsonData = JSON.parse(data);

        let types = new Array();
        for (let i=0; i<jsonData.types.length; i++) {
          types.push(jsonData.types[i].type.name);
        }

        this.pokemons.push(new Pokemon(jsonData.name, types, jsonData.weight, jsonData.sprites.front_default));
        resolve();
      })
      .catch((error) => console.log(error));
    });
  }

这是我正在处理的 JS 类中的两个函数。如您所见,函数getContent()执行fetch()并从 API 获取一些信息。这些信息包含更多的 URL,我也想在其中获取一些信息,因此我放置了一个for循环来执行第二个函数fetchPokemon(url)该函数将进行另一个 API 调用以获取一些其他信息。

我正在努力理解如何检测循环中的getContent()所有内容何时Promises得到正确解决,以便我可以继续使用其他功能。我觉得Promise.all可以提供帮助,但我没有成功。

我怎样才能做到这一点?

塞巴斯蒂安·卡茨马雷克

尝试使用Promise.all这样的:

  getContent() {
    fetch(this.url)
    .then((response) => response.text())
    .then((data) => {
      let jsonData = JSON.parse(data);

      const promises = [];
      for (let i=0; i<jsonData.results.length; i++) {

        promises.push(this.fetchPokemon(jsonData.results[i].url));
      }

      return Promise.all(promises);
    })
    .then((results) => {
      console.log(results);
    })
    .catch((error) => console.log(error));
  }

所以基本上你只需将所有的 Promise 推送到数组,然后申请Promise.all等待它们解决。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章