khoa-pham-async-await

Promise methods



1. Nhắc lại Promise Chain khi bị reject

function sleep(ms, data) {
  return new Promise(function (resolve) {
    setTimeout(() => resolve(++data), ms);
  });
}

sleep(1000, 0)
  .then(() => console.log('Line 1'))
  .then(() => console.log('Line 2'))
  .then(() => console.log('Line 3'))
  .then(() => console.log('Line 4'))
  .then(() => console.log('Line 5'));

Promise Chain

function sleep(ms, data) {
  return new Promise(function (resolve) {
    setTimeout(() => resolve(++data), ms);
  });
}

sleep(1000, 0)
  .then(function (data) {
    console.log('Line 1: ', data);
    return sleep(1000, data);
  })
  .then(function (data) {
    setTimeout(() => console.log('Line 2: ', data), 1000);
  })
  .then(function (data) {
    setTimeout(() => console.log('Line 3: ', data), 1000);
  })
  .then(function (data) {
    console.log('Line 4: ', data);
  })
  .then(function (data) {
    console.log('Line 5: ', data);
  });

Promise Chain

function sleep(ms, data) {
  return new Promise(function (resolve) {
    console.log(`Line ${data} : ${data}`);
    setTimeout(() => resolve(++data), ms);
  });
}

sleep(1000, 1)
  .then(function (data) {
    return sleep(1000, data);
  })
  .then(function (data) {
    return sleep(1000, data);
  })
  .then(function (data) {
    return sleep(1000, data);
  })
  .then(function (data) {
    return sleep(1000, data);
  });

Promise Chain

function sleep(ms, data) {
  return new Promise(function (resolve) {
    console.log(`Line ${data} : ${data}`);
    setTimeout(() => resolve(++data), ms);
  });
}

sleep(1000, 1)
  .then(function (data) {
    return sleep(1000, data);
  })
  .then(function (data) {
    return new Promise(function (resolve, reject) {
      reject();
    });
  })
  .then(function (data) {
    return sleep(1000, data);
  })
  .then(function (data) {
    return sleep(1000, data);
  });

Promise Chain

function sleep(ms, data) {
  return new Promise(function (resolve) {
    console.log(`Line ${data} : ${data}`);
    setTimeout(() => resolve(++data), ms);
  });
}

sleep(1000, 1)
  .then(function (data) {
    return sleep(1000, data);
  })
  .then(function (data) {
    return new Promise(function (resolve, reject) {
      reject('Dừng lại!');
    });
  })
  .then(function (data) {
    return sleep(1000, data);
  })
  .then(function (data) {
    return sleep(1000, data);
  })
  .catch(function (err) {
    console.error(err);
  });

Promise Chain

3. Promise.resolve

var newPromise = new Promise(function (resolve, reject) {
  resolve('Success!');
});

newPromise.then(function (result) {
  console.log('Result: ', result);
});

// Result:  Success!
var newPromise = Promise.resolve('Success!');

newPromise
  .then(function (result) {
    console.log('Result: ', result);
  })
  .catch(function (err) {
    console.log('Error: ', err);
  });

// Result:  Success!

4. Promise.reject

var newPromise = new Promise(function (resolve, reject) {
  // resolve('Success!');
  reject('Failure!');
});

newPromise
  .then(function (result) {
    console.log('Result: ', result);
  })
  .catch(function (err) {
    console.log('Error: ', err);
  });

// Error:  Failure!
var newPromise = Promise.reject('Failure!');
newPromise
  .then(function (result) {
    console.log('Result: ', result);
  })
  .catch(function (err) {
    console.log('Error: ', err);
  });

// Error:  Failure!

5. Promise.all

function tOut(t) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(`Completed in ${t} ms`);
    }, t);
  });
}
var time_start = new Date();

// Resolving a normal promise
tOut(1000)
  .then(function (res) {
    console.log('Task 1: ', res);
    return tOut(4000);
  })
  .then(function (res) {
    console.log('Task 2: ', res);
    return tOut(6000);
  })
  .then(function (res) {
    console.log('Task 3: ', res);
    console.log('Total time normal promise: ', new Date() - time_start);
  });

// Promise.all
//prettier-ignore
Promise.all([tOut(1000), tOut(4000), tOut(6000)])
  .then(function (res) {
    console.log('Total time Promise.all: ', new Date() - time_start);
  }
);

Promise.all

var pr1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve([1, 2]);
  }, 4000);
});

var pr2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve([3, 4, 5]);
  }, 4000);
});

Promise.all([pr1, pr2]).then((res) => {
  console.log('Result: ', res);
  console.log(res[0].concat(res[1]));
});

Promise.all

var pr1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve([1, 2]);
  }, 4000);
});

var pr2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve([3, 4, 5]);
  }, 4000);
});

var pr3 = Promise.reject('Error');

Promise.all([pr1, pr2, pr3])
  .then((res) => {
    console.log('Result: ', res);
    console.log(res[0].concat(res[1]));
  })
  .catch((err) => {
    console.error(err);
  });

Promise.all

function load1() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve([1, 2]);
    }, 2000);
  });
}

function load2() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve([3, 4, 5]);
    }, 3000);
  });
}

var time_start = new Date();
var arr = [];

// Resolving a normal promise
load1()
  .then(function (res1) {
    console.log(`Task 1: Completed in ${new Date() - time_start} ms`);
    arr = arr.concat(res1);
    return load2();
  })
  .then(function (res2) {
    console.log(`Task 2: Completed in ${new Date() - time_start} ms`);
    arr = arr.concat(res2);
    console.log(
      `Completed Single Promise in ${new Date() - time_start} ms : `,
      arr
    );
  });

// Resolving Promise.all
Promise.all([load1(), load2()]).then(function (res) {
  console.log(
    `Completed Promise.all in ${new Date() - time_start} ms : `,
    res[0].concat(res[1])
  );
});

Promise.all