javascript 从callback到promise到async/await

话说nodejs里有一个函数 setTimeout ,我们可以用它实现等几秒做一件事情的功能。

// 等3秒,念一句诗
setTimeout(() => {console.log('床前明月光')}, 3000);

 念诗一时爽,不停念诗不停爽,就变成了这个样子。

setTimeout(() => {
  console.log('窗前明月光')

  setTimeout(()=>{
    console.log('疑是地上霜')

    setTimeout(()=>{
      console.log('举头望明月')

      setTimeout(()=>{
        console.log('低头思故乡');
      }, 3000);
    }, 3000);

  }, 3000);

}, 3000);

但是,层层回调很不爽,江湖人称callback hell。于是乎,有人发明了promise

function timeout(ms){
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  })
}

timeout(3000).then(()=> {
  console.log('窗前明月光');
  return timeout(3000);
}).then(()=> {
  console.log('疑是地上霜');
  return timeout(3000);
}).then(()=> {
  console.log('举头望明月');
  return timeout(3000);
}).then(()=> {
  console.log('低头思故乡');
});

但是人们还不满足,有没有办法不要用回调函数?于是有了async/await

function timeout(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  })
}

async function main() {
  await timeout(3000);
  console.log('窗前明月光');
  await timeout(3000);
  console.log('疑是地上霜');
  await timeout(3000);
  console.log('举头望明月');
  await timeout(3000);
  console.log('低头思故乡');
}

main();

 

posted @ 2020-08-12 14:44  我是吉  阅读(249)  评论(0编辑  收藏  举报