Вызов API в функции отложенной загрузки, ограничивающий ответ api

#json #vue.js #axios

#json #vue.js #axios

Вопрос:

Я настроил проект, в котором я ограничиваю ответ API до 5, и после прокрутки до нижней части страницы я делаю новый вызов API для извлечения следующих 2 элементов в API. Но с текущим кодом он проверяет только, существуют ли 5 ранее извлеченных элементов в состоянии cards. Я совершенно не уверен в том, как получить 2 следующих элемента в API? У кого-нибудь есть какие-либо предложения относительно того, как это сделать? Спасибо,

 var app = new Vue({
el: '#app',
data: {
    cards: []
},
methods: {
    scroll(card) {
        window.onscroll = () => {
            let bottomOfWindow = document.documentElement.scrollTop   
            window.innerHeight === document.documentElement.offsetHeight;
            if(bottomOfWindow) {
            const url = 
            'https://api.jsonbin.io/b/5cab36508b8d1301a25bd8fa/1/';
                axios.get(url)
               .then(response => {
               for (var i = 0; i < this.cards.length; i  ) {
                            console.log('Cards id: ', this.cards[i].id)
                            if(this.cards[i].id !== 
                            response.data.results[i].id){            
                                for (var x = 0; x < 2; x  ) {   
                                this.cards.push(response.data.results[x])
                                }

                            } else{
                                console.log('No more cards to load')
                            }
                        }
                    }
                })
            }
        }
    },
    getAPI(){
        const url = 'https://api.jsonbin.io/b/5cab36508b8d1301a25bd8fa/1/';


            axios.get(url)

            .then(response => {
                for (var i = 0; i < 5; i  ) {
                    this.cards.push(response.data.results[i]);
                }
            })
            .catch(function (error) {
                console.log(error);
            })
            .then(function () {
                // always executed
            });
        console.log(this.cards)

    }
},
mounted() {
    this.scroll(this.card)
}
})
  

Комментарии:

1. Этот ваш цикл внутри .then — это просто псевдокод реального ограниченного API? Например, вы на самом деле не ограничиваете ответ в этом примере.

2. Я ограничиваю начальный ответ в другом сегменте кода. Я отредактировал код. Будет ли это более подходящим способом для этого? Спасибо.

3. Можем ли мы получить рабочий пример в JSFiddle?

4. @Deckerz Конечно, jsfiddle.net/leetajz/4rbwkj6a/17

Ответ №1:

Изменен метод, с помощью которого вы выполняете проверку. Вместо того, чтобы делать это по длине карт, вы перебираете длину результатов, и как только вы достигнете карты, которая не существует, вы добавляете их, отслеживаете добавленную сумму и возвращаетесь через 2 или когда их не осталось. Я изменил логику цикла на so.

 //Card with position i from results doesn't exist
if(this.cards[i] == undefined){
   //add this card - maybe add more logic to check for duplicate incase of reordering of response
   this.cards.push(response.data.results[i])
   //track card added
   cardsAdded  ;
} else {
    console.log('No more cards to load')
}

//check if cards added has reach limit of 2
if(cardsAdded == 2)
    return;
  

Смотрите: https://jsfiddle.net/as4dm03q /