Мне нужно запустить таймер, когда я создаю обещание, и когда оно истекает, я хочу отклонить / отменить обещание - PullRequest
0 голосов
/ 31 марта 2020

У меня есть функция, возвращающая объект обещания. Когда я вызываю эту функцию, я должен запустить таймер. Если обещание выполнено до того, как истечет таймер, тогда все в порядке. Иначе обещание должно быть отменено / отклонено. Как это сделать?

var myPromise = somethingFunction();
timerService.startTimer();
myPromise.then((res)=>{
...
}).catch((err)=>{
});

// Как отказаться от обещания, когда таймер истекает в этом сценарии?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Вы можете использовать Promise.race для достижения этого эффекта.

Следующий код случайным образом завершается или завершается неудачей:

const timeout = (ms) => 
  new Promise((_, reject) => setTimeout(() => reject('timed out'), ms))

function foo() {
  const p = new Promise((resolve) => 
    setTimeout(() => resolve('success!'), Math.random()*200))
  return Promise.race([timeout(100), p])
}

foo()
  .then((result) => console.log(result))
  .catch((err) => console.log(err))
0 голосов
/ 31 марта 2020

const promise1 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 500, 'one');
});

const promise2 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 100, 'two');
  //Your custom function here....
});

Promise.race([promise1, promise2]).then(function(value) {
  console.log(value);
  // Both resolve, but promise2 is faster
});

Вы можете использовать Promise.race для этого. Promise.race принимает массив обещаний и возвращает обещание, если одно из пройденных обещаний либо разрешает, либо отклоняет. Надеюсь, это поможет!

В приведенном выше примере обещания1 и обещания2 - это два обещания. Обе функции обещают разрешить быстрее2, поскольку время ожидания равно 100. Аналогичным образом, если вы хотите участвовать в гонке между двумя обещаниями, вы можете использовать этот подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...