Обещание решено слишком быстро - PullRequest
0 голосов
/ 24 апреля 2018

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

Итак, я хочу запустить обещание, и если обещание будет выполнено до 3 секунд, подождите оставшееся время.

Пример

export const operation = () => {

  const a = new Date();

  const myPromise = doAction().then(() => {

   const b = new Date();

   if((b - a) < 3000)
      operationIsDone();
   else
     setTimeout(() => {operationIsDone();}, b - a)

  });  
}

Есть ли npm или лучший способ сделать это? Заранее спасибо.

1 Ответ

0 голосов
/ 24 апреля 2018

Гораздо проще использовать второе обещание, которое просто запускает минимальное время ожидания. Затем используйте Promise.all, чтобы дождаться окончания обоих. Таким образом, ваш сценарий всегда будет ожидать по крайней мере задержки по умолчанию, но также дольше, если yourOwnPromise занимает больше времени.

const wait = delay => new Promise(resolve => setTimeout(resolve, delay));
const doAction = () => wait(500); // TODO replace this with your own function
const yourOwnPromise = doAction();

yourOwnPromise.then(() => {
    console.log('yourOwnPromise resolved now');
});

Promise.all([yourOwnPromise, wait(3000)]).then(() => {
    console.log('both resolved now');
});

Подробнее см. Promise.all.

...