Асинхронные get-запросы Axios возвращаются в неправильном порядке

#javascript

#javascript

Вопрос:

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

 const axios = require('axios')
const cheerio = require('cheerio')


axios.get('http://www.mangapanda.com/one-piece/1')
    .then((response) => {
        const $ = cheerio.load(response.data)
        //console.log($('option'))
        $('option').each((index, element) => {
            console.log(index)
            axios.get('http://www.mangapanda.com/one-piece/1/' (index 1)).then((response) => {
                const z = cheerio.load(response.data)
                var x = z('img#img')[0].attribs.src
                console.log(x, index)
            })
        });
    })
  

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

1. Вы просто хотите получить выходные данные в правильном порядке или вам требуется, чтобы запрос выполнялся последовательно?

2. Я хочу, чтобы выходные данные были в правильном порядке

3. В этом случае соберите свои обещания в массив (вместо того, чтобы присоединять .then их по отдельности) и вызывайте Promise.all , как показано ниже Квентином.

4. Хорошо, большое спасибо, я получил то, что хотел, работая!

Ответ №1:

Смысл асинхронных функций в том, что они выполняются, когда они выполняются.

Если вам нужно сохранить порядок, затем оберните обещания, возвращаемые axios, в массив и передайте его Promise.all .

 const promises = [
    axios(...),
    axios(...),
    axios(...),
];
Promise.all(promises).then(ordered_array => {
    ordered_array.forEach( result => { ... } );
});