博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈javascript异步发展历程
阅读量:6983 次
发布时间:2019-06-27

本文共 1679 字,大约阅读时间需要 5 分钟。

The asynchronous development of javascript

简单聊下js异步的发展历程,这里只简单聊用法

模拟一个简单需求:在1000毫秒之后执行某个操作

阶段1 :callback实现

const foo=(callback)=>{    setTimeout(()={        callback();    },1000)}复制代码

当然我们知道,当在1000毫秒之后执行的某个操作也是这样一个异步的时候,地狱式回调就开始了;

阶段2: promise实现

let p = new Promise((resolve,reject)=>{  setTimeout(()=>{    resolve();  },1000)});p.then(data=>{    // 某个操作})复制代码

这个时候,如果某个操作也是一个异步,我们就可以通过promise的链式处理,如下

let p = new Promise((resolve,reject)=>{  setTimeout(()=>{    resolve();  },1000)});p.then(data=>{    // 某个操作1}).then(data=>{    // 某个操作2}).then(data=>{    // 某个操作3}).catch(err=>{    // 错误捕捉})复制代码

阶段3 :generator实现

// * 和 yield一起使用,yield产出function * gen() {     // 可以暂停,调用next才会继续走  let a = yield '买菜'; // a的结果某个操作1的返回值  let b = yield a;     // b的结果是的结果某个操作2的返回值  return b;            // 返回某个操作2的返回值}let a = gen();          // 执行后返回的是迭代器console.log(a.next());console.log(a.next());复制代码

这里有个小插曲:有一天微信群里有人人关于generator的问题,一个大佬说不用学generator了,已经被废弃了,以后都用async的。吓得我赶紧去官网查了查,这里注意一下,async+await 是generator的语法糖,generator并不是被废弃了,只是有更方便的方式给我们用,为什么不呢?

阶段4 :async实现

  1. async返回的结果是一个promise
  2. await后面只能跟着promise
function move(ele, position) {            // move用来移动dom  return new Promise((resolve, reject) => {    let left = 0;    let timer = setInterval(() => {       // timer是一个用来移动dom的定时器      left += 5;      if (left >= position) {        clearInterval(timer);        ele.style.transform = `translateX(${position}px)`;        resolve();      } else {        ele.style.transform = `translateX(${left}px)`;      }    }, 15);  })}async function m() {  await move(ball1, 100);  await move(ball2, 100);  await move(ball3, 100);}m().then(data=>{  alert('ok');});复制代码

看起来是不是和同步代码很像了呢

That's all

如上;

转载地址:http://xxtpl.baihongyu.com/

你可能感兴趣的文章
Bash 中的特殊字符大全
查看>>
《C语言点滴》一1.5 内功修炼
查看>>
浅析 Linux 初始化 init 系统: UpStart
查看>>
《PHP和MySQL Web开发从新手到高手(第5版)》一1.7 万事俱备,摩拳擦掌
查看>>
【Hadoop Summit Tokyo 2016】LLAP:Hive上的次秒级分析查询
查看>>
倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?
查看>>
snownlp 中文语法分析
查看>>
Python中os和shutil模块实用方法集锦
查看>>
c++中的左值与右值
查看>>
阿里云推出免费套餐 30余款云产品半年免费
查看>>
linux 用户/用户组添加修改删除(ubuntu/centos)
查看>>
Flink 原理与实现:Window 机制
查看>>
Kubernetes环境下的各种调试方法
查看>>
CC2530之Flash笔记
查看>>
Weex Workshop 挑战赛,等你来战!
查看>>
linux 怎么完全卸载mysql数据库
查看>>
Dart的HTTP请求和响应(1)
查看>>
寻找最大的K个数,Top K问题的堆实现
查看>>
自动发布工具应该具备的11个标准特征
查看>>
页面设计四大基本原则
查看>>