Search code examples
javascriptecmascript-6promisees6-promise

Promise resolved too fast


I am using Promises and in the meanwhile i have a loading animation.
the problme is that my promise is resolved fast and the loader is quickly disappear.

So i want to launch a promise and if the promise is resolved before 3 sec wait the remaining time.

Example

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)

  });  
}

Is there any npm or a better way doing it? Thanks in advance.


Solution

  • It is much easier to use a second promise that just runs the minimum waiting time. Then use Promise.all to wait for both to finish. That way, your script will always wait at least the default delay but also longer if yourOwnPromise takes longer than that.

    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');
    });

    See Promise.all for details.