Я новичок в Node и модели асинхронного программирования. У меня возникают проблемы, связанные с простым требованием, которое кажется довольно базовым в синхронных средах: пролистывание ответа API до тех пор, пока ответ не станет пустым.
В частности, API при успешном вызове вернет данные истатус 200 или 206 (частичное содержание). Если я вижу ответ 206, мне нужно продолжать вызывать API (также отправляя параметр запроса page
, который я увеличиваю каждый раз), пока не увижу ответ 200.
На синхронном языкеЗадача будет очень простой:
// pseudocode
data = []
page = 1
do {
response = api.call(page)
data.append(response.data)
page++
} while (response != 200)
return data
Теперь в Node для одного вызова API будет работать такой код:
// fire when '/' has a GET request
app.get('/', (req, res) => {
axios.get('https://api.com/v1/cats')
.then(response => {
// now what??
});
});
});
См. комментарий //now what??
? Это та точка, где мне интересно, как действовать дальше. Я наткнулся на этот несколько релевантный пост, но не смог преобразовать его в формат, который будет работать для меня в Node и Axios.
Достаточно ли просто обернуть код аксиоса вотдельная функция? Я так не думаю, потому что если я сделаю это:
function getData(pageNum) {
axios.get('https://api.com/v1/cats')
.then(response => {
// now what??
});
});
}
Я не могу рассчитывать на возвращаемое значение, потому что, как только axios.get()
будет выполнено, функция будет завершена. Я могу позвонить getData()
снова после получения первого ответа, но затем, предположим, я хочу вернуть все данные из этих многочисленных вызовов в виде ответа HTTP от моего сервера Express. ,,как мне это сделать?
Надеюсь, я не буду обижаться за лень или что-то в этом роде. Я действительно огляделся, но ничего не нашел.