三秒後亮紅燈,二秒後亮綠燈,一秒後亮黃燈,反覆執行。
// 回傳 promise
function lightPromise(second, light) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(light);
    }, second * 1000);
  });
}
function main() {
  const redPromise = lightPromise(3, '[red]'); // 回傳紅燈 promise
  redPromise
    .then((light) => {
      console.log(light, new Date()); // 亮紅燈
      return lightPromise(2, '[green]'); // 回傳綠燈 promise
    })
    .then((light) => {
      console.log(light, new Date()); // 亮綠燈
      return lightPromise(1, '[yellow]'); / 回傳黃燈 promise
    })
    .then((light) => {
      console.log(light, new Date()); // 亮黃燈
      console.log('---------');
      main(); // 再次執行
    });
}Demo
https://www.yuantw.com/demo/js-promise-light/
參考連結: