实现一个类似于 machine 的函数:1 | /** |
1 | machine('machine').waitFirst(3).do('eat').do('run').wait(5).do('sleep').execute() |
上面代码的主要思路是, 通过使用 proxy 获取到每一次的动作, 将每一次的函数存放到一个函数list 数组中, 当执行 execute 的时候, 依次执行数组中的函数, 在执行过程中进行判断, 当判断为 wait或者 waitFirst 函数的时候, 等待 wait 或者 waitFirst 函数执行完毕之后执行:1 | // 对于 wait 或者 waitFirst 函数执行完毕之后返回了一个 promise |
proxy 进行拦截处理:1 | proxy = new Proxy(doFnMap, { |
Proxy 方法用于对一个对象的属性访问和获取进行拦截, 在上面的代码中, 使用 proxy 中的 get 方法,设置了当调用 doFnMap 中的方法的时候, 调用get 方法,在 get 方法中, 可以用来将将要执行的函数方法推入到函数数组列表中以及调整函数的执行顺序。