以特定顺序获取 api 请求

时间:2021-01-18 12:14:40

标签: javascript api

我正在尝试使用 JavaScript fetch 获取一些信息。像这样:

function apiReq (ids){
var api = ("https://anapioficeandfire.com/api/characters/" + ids);
fetch(api)

.then (result => result.json())
.then ((res) => { 
    
    (res)
    
    var charInfo = document.getElementById("banner");
   
    var label = document.querySelector(".characters__container");
    var cardBody = document.querySelector(".card-body");
    var ul = document.createElement("ul");
    label.appendChild(ul);
    charInfo.appendChild(label);

    switch (ids) {

            case ids:   cardBody.innerHTML += "<h3 class='card-title'>" + res.name + "</h3>";
                        cardBody.innerHTML += "<p class='card-text'> Title: <br>" + res.titles[0] + "</p>";
                        
                        if(res.titles[0] == "") {
                
                        cardBody.innerHTML += "<p class='card-text'>Unknown</p>";
                            
                        }
            
                        cardBody.innerHTML += "<p class='card-text'>Alias: <br>" + res.aliases[0] + "</p>";
                        cardBody.innerHTML += "<p class='card-text'> Born: <br>" + res.born + "</p>";
                break;
    }
    
})
    
.catch (error => console.log(error))
    
};

apiReq(148);    // Arya Stark
apiReq(583);    // Jon Snow
apiReq(957);    // Sansa Stark
apiReq(338);    // Eddard Stark
apiReq(529);    // Jamie Lannister
apiReq(1052);   // Tyrion Lannister
apiReq(565);    // Joffrey Baratheon
apiReq(901);    // Robert Baratheon
apiReq(1022);   // Theon Greyjoy
apiReq(1303);   // Daenerys Targaryen

我想要的是让 ids 按顺序出现,这样它总是先获取 Arya Stark,然后是 Jon Snow 等等......我怎么能做到这一点?或者它是一种使获取始终以特定顺序获取的方法(可能使用排序或其他方式)?

以特定顺序获取它们很重要,以便与我为此项目获得的不同图像相匹配。

3 个答案:

答案 0 :(得分:0)

您需要使函数异步并等待每个请求按顺序进行

async function apiReq (ids){
// your code
}

await apiReq(148);    // Arya Stark
await apiReq(583);    // Jon Snow
await apiReq(957);    // Sansa Stark
await apiReq(338);    // Eddard Stark
.
.
.

答案 1 :(得分:0)

如果要保证fetch顺序,需要使用async/await语法:

const charInfo = document.getElementById("banner");
const label = document.querySelector(".characters__container");

const apiReq = async (id) => {

    const api = ("https://anapioficeandfire.com/api/characters/" + id);

    try {
        const response = fetch(api);
        const res = await response.json();

        var cardBody = document.querySelector(".card-body");
        var ul = document.createElement("ul");

        label.appendChild(ul);
        charInfo.appendChild(label);

        cardBody.innerHTML += .....

    } catch (error) {
        console.log(error)
    }

};

( async() => {
    await apiReq(148);    // Arya Stark
    await apiReq(583);    // Jon Snow
    await apiReq(957);    // Sansa Stark
    await apiReq(338);    // Eddard Stark
    await apiReq(529);    // Jamie Lannister
})()

答案 2 :(得分:0)

我想我明白了:) 感谢您对我的帮助和帮助

相关问题