promise 封装定时器

function timeout(delay=1000){
  return new Promise((resolve,reject)=>{
    setTimeout(resolve,delay);
  })
}

timeout().then(()=>{
  console.log(1);
  return timeout(2000);
}).then(()=>{
  console.log(2);
});

============================================================================================================================================================================================================

function interval(delay=1000,callback){
  return new Promise((resolve,reject)=>{
    let id = setInterval(()=>{
      callback(id,resolve);
    },delay)
  })
}

interval(100,(id,resolve)=>{
  let box = document.querySelector('#box');
  let left = parseInt(window.getComputedStyle(box).left)
  box.style.left = left + 10 + 'px';
  if(left>=100){
    clearInterval(id);
    resolve(box)
  }
}).then(oNode=>{
  return interval(100,(id,resolve)=>{
    let width = parseInt(window.getComputedStyle(oNode).width);
    oNode.style.width = width-10 + 'px';
    if(width<=20){
      clearInterval(id);
      resolve(box);
    }
  })
}).then(oNode=>{
  interval(100,(id,resolve)=>{
    let height = parseInt(window.getComputedStyle(oNode).height);
    oNode.style.height = height - 10 + 'px';
    if(height<=20){
      clearInterval(id);
    }
  })
});

原文地址:https://www.cnblogs.com/jayking1314/p/14903498.html