Функция продолжается до того, как будет возвращен ответ обещания AX IOS - PullRequest
0 голосов
/ 09 июля 2020

У меня проблема с ответами этой функции. Функция должна возвращать объединенный список всех ITEMID для игры. Этот список может меняться в зависимости от того, что продается одновременно. Первый вызов ax ios используется для получения первых 1000 номеров элементов и количества страниц. Затем мне пришлось бы сделать вызовы ax ios для определения количества страниц для получения всех номеров элементов. Кажется немного утомительным, но я не думаю, что есть способ обойти это. Проблема в том, что функция не запускает другие страницы и возвращает только первые 1000 элементов до того, как вернутся другие ответы. Есть ли лучший способ реализовать эту функцию?

    export const getAllItemID = (region) => {

    let finalList = [];
    let pages = 0;
    let currentPage = 1;
    let region_buy_id = `URL For Call`;

    axios
        .get(region_buy_id)
        .then(json => {
            pages = json.headers['x-pages'];
            for(let k in Object.values(json.data)){
                finalList.push(json.data[k]);
            }
            currentPage++;
        })
        .then(()=>{
            while(currentPage <= pages) {
                let region_buy_id = `URL For Call`;
                axios
                .get(region_buy_id)
                .then((json) => {
                    for(let k in Object.keys(json.data)){
                        finalList.push(json.data[k]);
                    }
                });
                currentPage++;
            }
        })
        .then(()=>{
            return finalList;
        });

}


Updated Function 


export async function getAllItemID(region) {

    let finalList = [];
    let pages = 0;
    let currentPage = 1;
    
    let region_buy_id = `URL`;

    await axios
        .get(region_buy_id)
        .then(json => {
            pages = json.headers['x-pages'];
            for(let k in Object.values(json.data)){
                finalList.push(json.data[k]);
            }
            currentPage++;
        });
    while(currentPage <= pages) {
        let region_buy_id = `URL`;
        await axios
        .get(region_buy_id)
        .then((json) => {
            for(let k in Object.keys(json.data)){
                finalList.push(json.data[k]);
            }
        });
        currentPage++;
    }
        

}
...