如何编写一个arrange 函数

发布时间 2023-03-27 14:04:15作者: 10后程序员劝退师
/**
 * @description 链式调用的方法
 * @param {*} taskIs 
 * @example 
 * arrange('arrage').waitFirst(2).do('吃西瓜').do('吃西瓜2').execute()
 * @returns {execute, do, wait, waitFirst}
 */
export const arrange = (taskIs) => {
    const tasks = []
    tasks.push(() => {
      console.log(`${taskIs} IS UNDEFINED`);
    })
    async function execute(){
      for(const t of tasks){
        await t()
      }
    }
    function doSomething(someThing){
      tasks.push(() => {
        console.log(`start to ${someThing}`);
      })
      return this
    }
    function wait(dur){
      tasks.push(() => new Promise(resolve => {
          setTimeout(resolve, dur*1000);
      }))
      return this
    }

    // 先等待具体时间在执行
    function waitFirst(dur){
      tasks.unshift(() => new Promise(resolve => {
          setTimeout(resolve, dur*1000);
      }))
      return this
    }
    return {
      execute,
      do:doSomething,
      wait,
      waitFirst
    }
  }