Сопоставление разрешений с пн go дб ... Не в порядке .. Почему? - PullRequest
0 голосов
/ 05 апреля 2020

Я не уверен, как решить эту проблему с отображением ... Я думал, что ES6 всегда отображает по порядку ... но я думаю, что происходит что-то необычное? Вы можете помочь. Вот описание ... и код ..

Сначала я выбираю массив идентификаторов из Mon go DB в моей функции componentDidMount. Этот список приходит в том же порядке каждый раз. Я проверил.

Я передаю массив идентификаторов моей второй функции convertIdToCard ... Эта функция отображает массив и извлекает информацию из mongoDB из каждого идентификатора. Здесь вещи выходят из строя.

Выборка возвращает объект для каждого идентификатора, который был сопоставлен с исходным массивом. Это толкает объект в новый массив. Этот массив остается в том же порядке, что и исходный массив, примерно в 80% случаев ... и 20% массив не в том же порядке.

Я добавил setTimeout ко второй функции ... это помогает, но все еще не правильно в 100% случаев.

componentDidMount(){
    fetch(`http://localhost:5000/api/autoquotegenerators/${this.state._id}`)
        .then(res => res.json())
        .then(res => {
            this.convertIdToCard(res.quoteGenerator)
            console.log(res.quoteGenerator)
        });
}


convertIdToCard(quoteCards){
    quoteCards.map(id => {
        setTimeout(() => {
            fetch(`http://localhost:5000/api/autoquotegenerators/${id}`)
            .then(res => res.json())
            .then(res => {
                // console.log(res.quoteGenerator[0].cardType)
                this.createQuoteCards(res.quoteGenerator);
                console.log(res.quoteGenerator)
            })
        },1000)
        })
}

Вот мой новый код ---

componentDidMount(){
    fetch(`http://localhost:5000/api/autoquotegenerators/${this.state._id}`)
        .then(res => res.json())
        .then(res => {
            this.convertIdToCard(res.quoteGenerator)
            console.log(res.quoteGenerator)
        });
}


convertIdToCard(quoteCards){
    const selfMap = (quoteCards) => {
        if(quoteCards.length > 0){
            fetch(`http://localhost:5000/api/autoquotegenerators/${quoteCards.shift()}`)
            .then(res => res.json())
            .then(res => {
                // console.log(res.quoteGenerator[0].cardType)
                this.createQuoteCards(res.quoteGenerator);
                console.log(res.quoteGenerator)
                selfMap(quoteCards);
            })
        }else {
            console.log('done')
        }
    }
    selfMap(quoteCards);       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...