解決callback hell的新方法Promise

//方法一: 使用Promise的then方法
let fakeAjax = (url, sec) =>
  new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(`Ajax ${url} OK!`);
    }, sec);
  });

fakeAjax("api/1", 5000)
  .then((value) => {
    console.log(value);
    return fakeAjax("api/2", 3000);
  })
  .then((value) => {
    console.log(value);
    return fakeAjax("api/3", 1000);
  })
  .then((value) => {
    console.log(value);
  });
//方法二: 使用async/await方法
let fakeAjax = (url, sec) =>
  new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(`Ajax ${url} OK!`);
    }, sec);
  });

const res1 = await fakeAjax("api/1", 5000);
console.log(res1);
const res2 = await fakeAjax("api/2", 3000);
console.log(res2);
const res3 = await fakeAjax("api/3", 1000);
console.log(res3);

PS. 當Pomise的實例物件狀態改變(這裡指的是fakeAjax),then方法裡的成功/失敗的回調函式才會被調用,狀態改變的方式有三種,再 Promise 的回調函式裡調用了:

reslove(); //[[PromiseState]]:fulfilled
reject(); //[[PromiseState]]:fulfilled
throw "出現問題!"; //[[PromiseState]]:rejected
profile-image
Hi, 我是 Zeki。目前為一名前端工程師。我相信科技始終來自於人性,是用來幫助人們過上更有品質的生活的,但願也希望如此。