我对promise的概念相当陌生,我正在尝试建立一个简单的口袋妖怪列表(又名pokedex)。我正在使用以下代码。
我想把口袋妖怪的名字按照它们的标记列出,我不想扰乱秩序。我当前使用的代码不能保证此功能。
在foreach()
方法中,getch()
调用没有以任何方式链接,所以它取决于首先接收哪个响应,但是我希望indexx
的然后()
是执行前然后()
的索引x 1
.
const container = document.querySelector(".container");
fetch('https://pokeapi.co/api/v2/pokemon?limit=150')
.then(response => response.json())
.then(json => {
json.results.forEach((el, index) => {
fetch(el.url)
.then(response => response.json())
.then(json => {
const pokemonName = el.name;
const pokemontype = json.types[0].type.name;
container.innerHTML += `(${index+1}) ${pokemonName} - ${pokemontype} <br>`;
})
})
})
<div class="container"></div>
更新:下面是我的解决方案,同样使用Promise.all()
const container = document.querySelector(".container");
fetch('https://pokeapi.co/api/v2/pokemon?limit=150')
.then(response => response.json())
.then(json => {
const responseArr = [];
json.results.forEach(el => {
responseArr.push(fetch(el.url));
});
return Promise.all(responseArr);
})
.then(responses => {
const jsonArr = [];
responses.forEach(el => {
jsonArr.push(el.json());
});
return Promise.all(jsonArr);
})
.then(jsons => {
jsons.forEach((json, index) => {
const pokemonName = json.name;
const pokemonType = json.types[0].type.name;
container.innerHTML += `(${index+1}) ${pokemonName} - ${pokemonType} <br>`;
});
})
<div class="container"></div>
您可以使用Promise.all并传递第一个API调用的结果,这将按照请求的顺序返回响应:
js lang-js prettyprint-override">const container = document.querySelector(".container");
fetch('https://pokeapi.co/api/v2/pokemon?limit=150')
.then(response => response.json(), e => {
console.error(e);
throw e;
})
.then(json => {
Promise.all(json.results.map(el => fetch(el.url)))
.then(arr => {
arr.map(response => response.json())
.forEach((result, index) => {
result.then(el => {
const pokemonName = el.name;
const pokemontype = el.types[0].type.name;
container.innerHTML += `(${index+1}) ${pokemonName} - ${pokemontype} <br>`;
})
})
}).catch(e => {
console.error(e)
throw e;
});
}).catch(e => {
console.error(e)
throw e;
});
<div class="container"></div>
问题内容: 我将要有一个固定的项目清单,直到有一个随机化步骤,我才能运行查询直到执行该查询为止。 我想要以下内容: 假设is_launch_set将返回1,3,7,11,但已被随机分配到以下位置: 关于如何实现这一目标的任何想法?我在想也许是一个find_in_set,但不是很确定。 问题答案: 您可以使用以下任一方法来做到这一点: 要么 要么
问题内容: 我有以下查询,该查询基于逗号分隔的列表返回行 我希望此查询的结果以ID在列表中的顺序返回。SQL可以做到吗? 提前致谢 问题答案: 如果您需要输出以特定顺序显示,则需要使用服务器可以排序的内容来指定该顺序。不知道您要使用哪个引擎,一般的方案是创建一个临时表或使用行集构造函数将每个记录ID与所需的排序顺序配对。 例如(SQL Server)
问题内容: 我是Java的新手,正在尝试按字母顺序排列术语的arrayList。(一个术语定义为一个字符和一个整数)(例如 我的代码如下: 为什么这不起作用?以及我该如何完成呢?我的arrayList称为术语,填充有Term类型 问题答案: 您在这行代码中遇到的问题。您的课程不是So 的类型,这两个对象将基于哪个属性或条件方法? 您必须使您的类为Comparable类型。和,根据您的需要覆盖该方法
如何将按排序顺序转换为而不更改()?我们希望保留和。 将2,3,1添加到将其排序为1,2,3。从创建一个将具有2,3,1的顺序。中的和方法也将具有2,3,1的顺序。我猜这与的实现有关。
如何按特定顺序运行quarkus测试?通常我们有@InSequence注释(来自arquillian IIRC),我们可以实现这一点。 但是我没有找到任何类似的Quarkus在"org.junit.jupiter.api"软件包提供Quarkus-朱尼5。 它将以一个替代的顺序运行,我试图使用org.junit.jupiter.api.顺序与@Testmetodorder(方法命令。nnotati
我对列表之类的东西很陌生,目前正在努力学习它们。我用它们制作了一个程序,一切都很顺利,直到我无法对列表中的数字进行排序。现在,每当我看到代码的这一部分时,它就会停止工作: 你能帮我解决我做错的事情吗?