Я делаю пост-запрос с хорошим объемом данных, который займет около минуты, чтобы закончить сохранение. Хостинг, который я использую для этого, будет задерживать запросы через 5 секунд, поэтому мне нужно настроить его так, чтобы периодически проверять, завершено ли сохранение данных, чтобы получить окончательное обновление.
Я использую request-promise
и рассмотрел оба подхода setTimeout
и setInterval
. В моей последней попытке (ниже) я использую setTimeout
подход, но мой второй then
продолжает вызываться почти сразу. Я хочу, чтобы это зависало на первом этапе then
, пока оно не будет проверено несколько раз (24 здесь) или фактически закончено.
Возможно, у меня совершенно неправильный подход, но я не нахожу примеров того, на что я пытаюсь ссылаться. Будем весьма благодарны за любые указания на хороший пример этого или на то, где я иду не так.
const request = require('request-promise');
function checkFiles () {
return request({
uri: `${process.env.ROOT_URL}/api/v1/get/file-processing`,
method: 'GET',
json: true
})
.then(res => { return res; })
.catch(err => { return err; });
}
async function init () {
const filesPostOptions = {/* request options */};
await request(filesPostOptions)
.then(async status => { // THEN #1
if (status.status === 201) {
return status;
}
let checks = 0;
const checkIt = function() {
checks++;
checkFiles()
.then(res => {
if (res.status === 201 || checks > 24) {
status = res;
return status;
} else {
setTimeout(checkIt, 5000);
}
})
.catch(err => {
console.error(err);
});
};
checkIt();
})
.then(status => { // THEN #2
if (!status.status) {
throw Error('Post request timed out.');
}
return status;
})
.catch(err => {
err = err.error ? err.error : err;
console.error(err);
});
}
Почтовый ответ доставит ответ со свойством status
(код состояния) и свойством message
.