使用Promise实现每隔1秒输出1,2,3

同步累加then函数

  1. const arr = [1,2,3]
  2. arr.reduce((memo,cur) => {
  3. return memo.then(() => {
  4. return new Promise(resolve => {
  5. setTimeout(() => resolve(console.log(cur)),1000)
  6. })
  7. })
  8. },Promise.resolve())

使用Promise实现红绿灯交替重复亮

红灯3秒亮一次,黄灯2秒亮一次,绿灯1秒亮一次;如何让三个灯不断交替重复亮灯?(用Promise实现)三个亮灯函数已经存在:

  1. function red() {
  2. console.log('red');
  3. }
  4. function green() {
  5. console.log('green');
  6. }
  7. function yellow() {
  8. console.log('yellow');
  9. }
  1. 封装亮灯函数,用于控制不同秒数和颜色
  2. 链式调用串起亮灯顺序,最后递归自己
    1. const light = function (wait,cb) {
    2. // 需要将其包装成一个Promise 这样方便链式调用
    3. // 因为只有前一个状态执行,下一个then函数才会执行
    4. return new Promise(r => {
    5. setTimeout(() => {
    6. cb()
    7. resolve()
    8. },wait)
    9. })
    10. }
    11. const step = function () {
    12. Promise.resolve().then(() => {
    13. return light(3000,red)
    14. }).then(() => {
    15. return light(2000,green)
    16. }).then(() => {
    17. return light(1000,yellow)
    18. }).then(() => {
    19. step()
    20. })
    21. }

    实现mergePromise函数

    封装一个异步加载图片的方法

    限制异步操作的并发个数并尽可能快的完成全部