Вы не можете ожидать setTimeout
, так как он не возвращает Promise
.
Вы можете реализовать функцию, которая возвращает Promise
, которое выполняется через 3 секунды.
function timeout(seconds) {
return new Promise((resolve) => {
setTimeout(resolve, seconds * 1000)
});
}
Вы можете ожидать указанную выше функцию в своем коде, передав количество секунд, в течение которых вы хотите ждать
let test = async () => {
let externalCallResponse = '';
setTimeout(async () => {
externalCallResponse = await externalCall();
}, 0);
await timeout(3); // wait for 3 seconds
if(externalCallResponse != '') return true;
else return false;
}
Следующий фрагмент кода демонстрирует использование функции timeout
, описанной выше. Он имитирует запрос api, который возвращает ответ через 4 секунды.
function timeout(seconds) {
return new Promise(resolve => {
setTimeout(resolve, seconds * 1000);
});
}
function apiRequest() {
return new Promise(resolve => {
setTimeout(() => resolve('Hello World'), 4000);
});
}
let test = async () => {
let externalCallResponse = '';
setTimeout(async () => {
externalCallResponse = await apiRequest();
}, 0);
await timeout(3); // wait for 3 seconds
if (externalCallResponse != '') return true;
else return false;
};
test()
.then(res => console.log(res))
.catch(err => console.log(err.message));