khoa-pham-async-await

Cấu trúc và cách sử dụng Promise



1. Mục tiêu:

2. Promise

3. Cấu trúc Promises

var newPromise = new Promise(
  // Executor : Khối lệnh xử lý trước khi gán cho đối tượng newPromise
  function (resolve, reject) {
    //Logic: Xử lý Logic
    // 1. Thành công/Xử lý: resolve()
    // 2. Thất bại/Từ chối: reject()
  }
);

4. Cách sử dụng Promise

newPromise.then().catch().finally();
newPromise
  .then(function () {
    console.log("Successfully!");
  })
  .catch(function () {
    console.log("Failure!");
  })
  .finally(function () {
    console.log("Done!");
  });

5. Các thử nghiệm xử lý Promise

5.1 Trạng thái Pending

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // resolve()
  // reject()
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

Pending Pending

5.2 Trạng thái fulfilled

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  resolve()
  // reject()
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  // .then(function () {
  //   console.log("Successfully!");
  // })
  .catch(function () {
    console.log("Failure!");
  })
  .finally(function () {
    console.log("Done!");
  });

fulfilled

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  resolve()
  // reject()
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(function () {
    console.log("Successfully!");
  })
  .catch(function () {
    console.log("Failure!");
  })
  .finally(function () {
    console.log("Done!");
  });

fulfilled

5.3 Trạng thái Reject

5.3.1 Báo lỗi Uncaught (in promise) undefined

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // resolve()
  reject()
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(function () {
    console.log("Successfully!");
  })
  // .catch(function () {
  //   console.log("Failure!");
  // })
  .finally(function () {
    console.log("Done!");
  });

Reject

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // resolve()
  reject();
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);
newPromise
  .then(console.log("Successfully!"))
  .catch(console.log("Failure!"))
  .finally(console.log("Done!"));

Reject

5.3.2 Xử lý bắt lỗi

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // resolve()
  reject()
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(function () {
    console.log("Successfully!");
  })
  .catch(function () {
    console.log("Failure!");
  })
  .finally(function () {
    console.log("Done!");
  });

Reject

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // resolve()
  reject()
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(
    function (resolve){
      console.log("Successfully!");
    }, 
    function (error){
      console.log("Error!") 
    } 
  )
  .catch(function () {
    console.log("Failure!");
  })
  .finally(function () {
    console.log("Done!");
  });

Reject

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // resolve()
  reject();
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(
    (resolve) => console.log("Successfully!"),
    (error) => console.log("Error!")
  )
  .catch(() => console.log("Failure!"))
  .finally(() => console.log("Done!"));

Reject

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // resolve()
  reject();
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(
    (resolve) => console.log("Successfully!"),
    (error) => console.log("Error!")
  ).catch(console.log("Failure!"))
  .finally(() => console.log("Done!"));

Reject

6. Xử lý dữ liệu Promises trả về

6.1 Khi resolve()

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // Fake API data Promise
  resolve("Học lập trình Javascript!!!")

});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(function (data) {
    console.log("Successfully: ", data);
  })
  .catch(function () {
    console.log("Failure!");
  })
  .finally(function () {
    console.log("Done!");
  });

Ví dụ Resolve

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // Fake API data Promise
  resolve([
    {
      id: 1,
      name: "Javascript"
    }, 
    {
      id: 2,
      name: "PHP"
    }, 
    {
      id: 3,
      name: "CSS"
    }, 
  ])

});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(function (courses) {
    console.log("Successfully: ", courses);
  })
  .catch(function () {
    console.log("Failure!");
  })
  .finally(function () {
    console.log("Done!");
  });

Ví dụ Resolve

6.2 Khi reject()

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // Fake API data Promise
  reject([
    {
      id: 1,
      name: "Javascript",
    },
  ]);
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(function (result) {
    console.log("Successfully: ", result);
  })
  .catch(function (error) {
    console.log("Failure: ", error);
  })
  .finally(function () {
    console.log("Done!");
  });

Ví dụ Reject

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // Fake API data Promise
  reject("Lỗi request Timeout!");
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(function (result) {
    console.log("Successfully: ", result);
  })
  .catch(function (error) {
    console.log("Failure: ", error);
  })
  .finally(function () {
    console.log("Done!");
  });

Ví dụ Reject

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // Fake API data Promise
  reject(new Error("Lỗi request Timeout!"));
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(function (result) {
    console.log("Successfully: ", result);
  })
  .catch(function (error) {
    console.error(error + '');
  })
  .finally(function () {
    console.log("Done!");
  });

Ví dụ Reject

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // Fake API data Promise
  reject(new Error("Lỗi request Timeout!"));
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(function (result) {
    console.log("Successfully: ", result);
  })
  // .catch(function (error) {
  //   console.error(error + '');
  // })
  .finally(function () {
    console.log("Done!");
  });

Ví dụ Reject

var newPromise = new Promise((resolve, reject) => {
  console.log("Xử lý Promise!");
  // Fake API data Promise
  reject(new Error("Lỗi request Timeout!"));
});

setTimeout(() => {
  console.log(newPromise);
}, 1000);

newPromise
  .then(
    function (result) {
      console.log("Successfully: ", result);
    },
    function (error) {
      console.error(error + "");
    }
  )
  // .catch(function (error) {
  //   console.error(error + '');
  // })
  .finally(function () {
    console.log("Done!");
  });

Ví dụ Reject

7. Tóm tắt Promises

8. Trả lời phỏng vấn nếu được hỏi về Promise

Hỏi: Trình bày khái niệm về Promise

Trả lời: