Зацикливаясь на обещании и ожидании? - PullRequest
0 голосов
/ 02 мая 2020

Я сделал функцию, которая подключается к API, который возвращает массив с 100 объектами одновременно. Без l oop функция getPageData () работает, когда вы передаете int. Однако, когда я пытаюсь повторить его, он ничего не возвращает. Установка тайм-аута, похоже, не помогает l oop.

Пожалуйста, помогите

async function updateWholeDB(){
    var results = [];
    for (let i = 0; i < getPages(); i++) { 
        setTimeout(function() {
            getPageData(i).then((data) => {
                console.log(data)
                results.push(data) ;
            })
        }, 2000)

        }
    return Promise.all(results);
}

1 Ответ

1 голос
/ 02 мая 2020

Promise.all() работает ли он правильно, когда вы передаете ему массив обещаний, а не массив результатов. Затем он возвращает обещание, которое разрешается в массив результатов. Таким образом, вы не используете его должным образом.

Кроме того, здесь нет никаких оснований для setTimeout() здесь, если все правильно закодировано.

Если что вы ' Пытаясь сделать это, вы получите массив результатов от вызова getPageData() несколько раз, вы можете сделать это следующим образом:

function updateWholeDB(){
    let promises = [];
    for (let i = 0; i < getPages(); i++) { 
        promises.push(getPageData(i));
    }
    return Promise.all(promises);
}

// usage
updateWholeDB().then(results => {
   console.log(results);
}).catch(err => {
   console.log(err);
});

Это предполагает, что getPageData() возвращает обещание, которое разрешается правильно с данными, которые вас интересуют. Если это не так, то вам придется показать нам этот код тоже, чтобы мы могли посоветовать, как его исправить.

...