-1

In the following code, what I'm after is to get the alert, after the counting is finished in the setInterval. The alert shows first though, and then the counting happens. What have I done wrong?

function function1() {
  return new Promise((resolve, reject) => {
    console.log('in function1 ')
    function2().then(resolve());
  });
}

function function2() {
  return new Promise((resolve, reject) => {
    var x = 0;
    I = setInterval(function() {
      console.log(x);
      if (x > 10) {
        clearInterval(I);
        resolve()
      };
      x++
    }, 100);
  });
}

function1().then(alert('finished'));
Heretic Monkey
  • 11,687
  • 7
  • 53
  • 122
user568551
  • 337
  • 3
  • 11

1 Answers1

1

Promise#then's first argument:

onFulfilled : A Function called if the Promise is fulfilled. This function has one argument, the fulfillment value. If it is not a function, it is internally replaced with an "Identity" function (it returns the received argument).

You can either pass a function name or a function as below:

function function1() {
  return new Promise((resolve, reject) => {
    console.log('in function1 ')
    function2().then(resolve); // onFulfilled
  });
}

function function2() {
  return new Promise((resolve, reject) => {
    var x = 0;
    I = setInterval(function() {
      console.log(x);
      if (x > 10) {
        clearInterval(I);
        resolve()
      };
      x++
    }, 100);
  });
}

function1().then(() => alert('finished')); // onFulfilled
Majed Badawi
  • 27,616
  • 4
  • 25
  • 48