JavaScript实现异步的五种实现方法


文章目录

  • JavaScript实现异步的五种实现方法
  • 前言
  • 一、同步和异步是什么?
    • 1.同步任务:
    • 2.异步任务:
  • 二、异步方法有哪些(5种):
    • 1.webWork(创建分线程)
    • 2.promise(es6方法)
    • 3.Async await 异步的实现方法
    • 4.window.fetch() 的实现方法
    • 5.jquery中的deffered对象 的实现方法
  • 总结
    • 异步处理方法

前言

一、同步和异步是什么?

1.同步任务:

js中的同步任务就是按照顺序执行(可以理解为A------>B,只有一条道路可以到达B)

2.异步任务:

异步肯定与同步不一样.简单来说异步任务就像:到达终点的路多了几条(A地点------->B地点,中间有很多条路可以走.不会造成A----->B地点的主路压力增大)
异步任务 setTimeout setInterval xmlHttprequest 等

二、异步方法有哪些(5种):

     1.webwork 为了让任务在多线程去执行,防止复杂逻辑阻塞线程2.promise 为了让异步任务顺序执行,解决地狱回调3.window.fetch H5新增的拉取资源的 api  1.通过.then() 2.数据序列化 3.通过.then()获取数据4.jquery.deffered对象 为了让创建的deffered对象的时候和异步任务属于同步代码的结果,并且能够保证deffered和promise进行转换5.async和awit 实质上是对Promise()对象提供的 -语法糖-. 让代码更简洁.通过同步代码的形式来实现异步操作

1.webWork(创建分线程)

index.js为加载到html页面中的主线程(js文件)

work.js为在index中创建的分线程


 1.werbwork的实现方法①在html中引入index.js主线程②在index.js中 创建分线程  var w =new webwork('work.js')③在index.js中 通过 w.postmesage('数据') 向子线程发送数据④在work.js中  通过onmessage=function(ev){ev.data  postmessage(a)} 接受主线程发送过来的ev.data数据⑤在index.js中 通过onmessage=function(ev){ev.data} ev.data 接受  a 的值.

index.js(主)代码如下(示例):

//创建一个分线程 work.js
var w = new Worker('work.js')//主线程向分线程发送数据
w.postMessage(40);//接受分线程转递过来的数据
w.onmessage = function(ev) {console.log(ev);console.log(ev.data);
}

work.js(分线程)代码如下(示例):

function fibo(n) {var num = 1;var num1 = 1;var sum = 0;for (let i = 2; i < n; i++) {sum = num + num1;num = num1;num1 = sum;}return sum;
}onmessage = function(ev) {console.log(ev);this.postMessage(fibo(ev.data))
}

2.promise(es6方法)

介绍步骤 如下:

2.promise的实现方法(处理异步),解决地狱回调①创建promise实例   var p =new promise((reslove,reject)=>{reslove('res')});②p.then(res=>  console.log(res))③  // reslove(变量) 对应的是 then(变量 => {变量的操作})//promise 是对异步任务处理的对象,判断异步任务有没有成功执行的状态//resolve , reject 也是两个参数//resolve 是调用成功的函数  reject 是调用失败的函数//如果不使用 resove 和 reject 两个函数 状态为pendding ---resolve之后变成了 成功状态 fulfilled//promise 的then()  在成功状态的时候被触发  resolve(res)  res可以传递参数//promise 的catch()  在失败状态的时候被触发 reject(res)  res可以传递参数

代码如下(示例):

 var promise = new Promise((reslove, reject) => {setTimeout(() => {console.log('执行大量代码');}, 2000);//resolve('我成功了'); //resolve 之后变成了 成功状态 fulfilled// reject('我失败了'); //reject 之后promise状态变为 失败状态});//promise 的then()  在成功状态的时候被触发  resolve(res)  res可以传递参数//promise 的catch()  在失败状态的时候被吃法 reject(err)  err可以传递参数promise.then((res) => {console.log(res);}).catch((err) => {console.log(err);})

3.Async await 异步的实现方法

介绍步骤 如下(相当于promise用法的语法糖):

//async 和 await 的使用场景//async 与 await 必须连用 , await只能用在async函数里面//await作用等待异步任务完成,如果请求数据成功了,执行then函数//  async function getData() {//      console.log('000');//      var book1 = await window.fetch('https://autumnfish.cn/top/artists');//      //第二个请求//      console.log('1111');//      var book2 = await $.get('https://autumnfish.cn/top/artists');//      console.log('2222');//      return [book1.json(), book2]//  };//  console.log('aaa');//  getData().then(res => {//      return res[0];//  }).then(res => console.log(res)).catch(err => {//      console.log(err)//  })

4.window.fetch() 的实现方法

  <script>//拉取资源 fetch是 es6新增的一个解决异步的方案, 拉取网络资源var url = 'http://123.207.32.32:8000/home/data?type=new&page1';//fetch() 返回响应的promise // 第一层then返回的是:响应的报文对象   //第二层:如果想要使用第一层的数据,必须把数据序列化  res.json() 返回的对象是一个 Promise对象再进行then()window.fetch(url).then(res => {console.log(res);//将数据序列化return res.json()}).then(res => console.log(res));
</script>

5.jquery中的deffered对象 的实现方法

<script>function cook() {console.log('开始做饭');var def = $.Deferred() //创建一个jquery延时对象setTimeout(() => {console.log('做完了');/*   def.resolve('烩面'); */def.reject('做饭失败')}, 2000);//返回Deferred()  吧def实例转化成promise实例返回//返回可以利用then catch finally 等这些函数return def.promise()}cook().then(res => {console.log(res);}).catch(err => {console.log(err);});/*    $.get('http://123.207.32.32:8000/home/data?type=new&page1').then(res => {console.log(res);}).catch(err => console.log(err)); */$.get('http://123.207.32.32:8000/home/data?type=new&page1').done(res => {console.log(res);}).fail(err => console.log(err)).then(() => alert(1213))
</script>

总结

提示:这里对文章进行总结:

异步处理方法

1.webwork 为了让任务在多线程去执行,防止复杂逻辑阻塞线程
2.promise 为了让异步任务顺序执行,解决地狱回调
3.window.fetch H5新增的拉取资源的 api  1.通过.then() 2.数据序列化 3.通过.then()获取数据
4.jquery.deffered对象 为了让创建的deffered对象的时候和异步任务属于同步代码的结果,并且能够保证deffered和promise进行转换
5.async和awit 实质上是对Promise()对象提供的 -语法糖-. 让代码更简洁.通过同步代码的形式来实现异步操作1.werbwork的实现方法
①在html中引入index.js主线程
②在index.js中 创建分线程  var w =new webwork('work.js')
③在index.js中 通过 w.postmesage('数据') 向子线程发送数据
④在work.js中  通过onmessage=function(ev){ev.data  postmessage(a)} 接受主线程发送过来的ev.data数据
⑤在index.js中 通过onmessage=function(ev){ev.data} ev.data 接受  a 的值.2.promise的实现方法(处理异步),解决地狱回调
①创建promise实例   var p =new promise((reslove,reject)=>{reslove('res')});
②p.then(res=>  console.log(res))
③  // reslove(变量) 对应的是 then(变量 => {变量的操作})3.window.fetch() 的实现方法
①window.fetch('url').then(console.log(res)return res.json() //必须序列化  返回的是一个respones对象
)
4.async 和 awit的使用方法:async function f2() {var books = await $.get('https://autumnfish.cn/top/artists');return books
};
f2().then(res => {console.log(res);
})
5.jquery的jquery.deffered对象上面有介绍,就不做总结了

JavaScript 异步 实现异步的五种实现方法相关推荐

  1. (转)javascript异步编程的四种方法

    本文转自:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html 作者:阮一峰 本文仅仅作为个人mark ...

  2. JavaScript 数组遍历的五种方法(转)

    转自:JavaScript 数组遍历的五种方法 这篇文章主要介绍了JavaScript 数组遍历的五种方法,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以了解下 在使用 JavaS ...

  3. JavaScript数组去重的五种方法

    JavaScript数组去重的五种方法 先简单准备一个数组,用于方法的实验: let array = [1,1,2,3,4,4,1,5,6,6,7,7,7]; console.log(`去重前的数组: ...

  4. 程序员成长之旅——同步IO和异步IO(五种IO模型)

    程序员成长之旅--同步IO和异步IO(五种IO模型) 同步和异步 同步 异步 消息通知 场景比喻 阻塞和非阻塞 阻塞 非阻塞 事例 同步IO 阻塞IO 非阻塞IO 信号驱动IO 多路转接IO 异步IO ...

  5. java中的五种排序方法_用Java排序的五种有用方法

    java中的五种排序方法 Java排序快速概述: 正常的列表: private static List VEGETABLES = Arrays.asList("apple", &q ...

  6. linux安装 中文乱码怎么解决方法,Linux安装GBK/GB2312程序显示乱码的五种解决方法...

    不少用户在Linux系统中安装GBK或GB2312的时候遇到了乱码问题,这主要是系统默认语言是uft8所导致,对于该问题可用五种方法进行解决,接下来是小编为大家收集的Linux安装GBK/GB2312 ...

  7. python list方法说明_对python中list的五种查找方法说明

    Python中是有查找功能的,五种方式:in.not in.count.index,find 前两种方法是保留字,后两种方式是列表的方法. 下面以a_list = ['a','b','c','hell ...

  8. python list find函数_对python中list的五种查找方法说明

    Python中是有查找功能的,五种方式:in.not in.count.index,find 前两种方法是保留字,后两种方式是列表的方法. 下面以a_list = ['a','b','c','hell ...

  9. 服务器系统记事本乱码,win7系统记事本出现乱码的五种解决方法

    win7系统自带有记事本功能,它是一个简单的文字编辑器,用户可直接打开记事本记录文字,相信大家对雨林木风win7系统的记事本在熟悉不过.然而有不少win7系统用户在打开记事本的时候出现乱码,这是怎么回 ...

最新文章

  1. [ Luogu 4626 ] 一道水题 II
  2. python开发windows界面_electron作为python界面开发入门
  3. 实战SSM_O2O商铺_34【商品】商品编辑之Controller层的实现
  4. MAT之SVM:SVM之分类预测根据已有大量数据集案例,输入已有病例的特征向量实现乳腺癌诊断高准确率预测
  5. 上海库源电气OrCAD视频教程
  6. python编程8g的内存够么_详解解决Python memory error的问题(四种解决方案)
  7. 新Azure 服务仪表盘!
  8. mach内核和linux对比,海思Hi3511/Hi3512 Linux内核与标准内核差异说明
  9. Oracle数据库的静默安装详解
  10. android 5.0 ble demo,Android BLE蓝牙例子(包括android版Lightblue)实例源码
  11. snmpwalk 获取端口流量_通过snmpwalk命令计算接口速率
  12. java18.取球游戏,12种球类游戏,想怎么玩就怎么玩!
  13. android撕衣服案例解析
  14. Akamai阿卡迈_abck逆向sensor_data(一)
  15. 牛客 BL1 扭蛋机
  16. 微信小程序一 全局变量/js使用详解
  17. 《C语言程序设计》江宝钏主编-习题8-4-复制字串!!!
  18. 计算机网络基本设备及网络拓扑图
  19. swath data 是什么意思
  20. 总感觉自己什么都不会,做什么都做不好怎么办?

热门文章

  1. 你的万圣节专属头像生成器,快来试试(内附家喵营业照)
  2. 历经22年,我国突破全球首次非人灵长类动物克隆技术,克隆猴已可批量生产...
  3. 深度解析某头条的一道TopN面试题
  4. 华为watch3pro和苹果watch6区别 华为watch3pro和苹果watch6对比评测
  5. Centos 6: nginx+php+oracle安装配置
  6. linux配置Jdk1.8
  7. 华为手机坏了数据怎么导出_剪映导出视频不清晰怎么办,手机剪映导出的视频模糊...
  8. C#Json怎么组合在一起_github上有哪些不错的C# .Net项目?
  9. 2017/11/28车辆限号日期查询
  10. Games101 作业草稿 II:MSAA 和 SSAA 辨析