Если вы хотите делать запросы последовательно, вы не должны использовать Promise.all
, который инициализирует все параллельно - лучше использовать reduce
, await
с разрешением предыдущей итерации и await
обещание-тайм-аут.Например:
async function getAllSearchResultProfiles(searchAjaxUrl) {
const ajaxUrls = [];
for (let i = 0; i < numResults; i += resultsPerPage) {
ajaxUrls.push(searchAjaxUrl + "&start=" + i);
}
const responses = await ajaxUrls.reduce(async (lastPromise, url) => {
const accum = await lastPromise;
await new Promise(resolve => setTimeout(resolve, 1000));
const response = await getSearchResultsForOnePage(url);
return [...accum, response];
}, Promise.resolve([]));
// do stuff with responses
const searchProfiles = responses.map(response => (
response.meta.total === 0
? []
: response.result.searchResults
));
return [].concat(...searchProfiles);
}
Обратите внимание, что только асинхронные операции должны передаваться из одной .then
в другую;синхронный код не должен быть связан с .then
, просто используйте переменные и выведите код как обычно.