Есть ли способ для функции вернуть значение конкурирующих обещаний (как это делает AWAIT)? - PullRequest
0 голосов
/ 29 июня 2019

Меня интересует случай оборачивания асинхронной операции в таймаут для сбоя при завершении.Например, я пытаюсь получить данные с помощью функции выборки, если через 4 секунды она не приходит, функция возвращает результат, указывающий на ошибку.

Я пытался выяснить это с помощью Promise.гонка, но все еще не может повлиять на возвращаемое значение функции.

async timeoutedAwait(awaitedFunc,timeoutInMs){
  setTimeout(()=>{ /* somehow make the function return {success:false,value:undefined} */},timeoutInMs);
  return await awaitedFunc();
}
//....
let result=timeoutedAwait(someFetchOperationFunc,4000);
if(result.success){/* success handling code */}
else{ /* failure handling code */}


1 Ответ

0 голосов
/ 29 июня 2019

как то так?

async function timeoutedAwait(awaitedFunc,timeoutInMs){
  return await Promise.race([awaitedFunc,fail(timeoutInMs)]);
}

var fail = function (time) {
  return new Promise(function(resolve, reject) {
    setTimeout(resolve, time, {success:false,value:undefined});
 });
}

let result=timeoutedAwait(someFetchOperationFunc,4000);
if(result.success){/* success handling code */}
else{ /* failure handling code */}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...