异步在此就不再赘述,下面主要说一下JS中异步的实现方式。

1,setTimeout 计时器 ,实现代码如下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>function print() {console.log("setTimeOut Run")}console.log("5秒后之后 print函数,打印:setTimeOut Run")setTimeout(print, 5000);</script>
</body>
</html>

2,Promise ,简单用法如下:

Promise 构造函(即function (resolve, reject) { // 要做的事情...})数只有一个参数,是一个函数,这个函数在构造之后会直接被异步运行,所以我们称之为起始函数。起始函数包含两个参数 resolve 和 reject。resolve 和 reject 都是函数,其中调用 resolve 代表一切正常,reject 是出现异常时所调用的:

在构造函数中的内容是同步运行。如下

    <script>new Promise(function (resolve, reject) {console.log("new a promise")});console.log("last console")</script>

运行结果如下:

显而易见,先执行console.log("new a promise"),然后执行console.log("last console")

Promise,完成结构如下:

Promise().then().catch().finally()

then内开始异步运行,catch 异常捕捉,finaly 整个代码执行完后执行的代码

 <script>new Promise(function (resolve, reject) {resolve("执行正确")reject("执行错误")}).then(function(str){console.log(str)}).catch(function(str){console.log(str)}).finally(function(){console.log("执行完毕")});console.log("last console")</script>

执行结果如下:

先执行  console.log("last console")

然后执行then,

最后执行 finally。

执行了 resolve 即进入了then,不在执行reject。

如果将resolve和reject换一下位置 ,执行了reject函数 跳到catch 则不会执行 then函数

  <script>new Promise(function (resolve, reject) {reject("执行错误")resolve("执行正确")}).then(function(str){console.log(str)}).catch(function(str){console.log(str)}).finally(function(){console.log("执行完毕")});console.log("last console")</script>

执行结果如下:

由输出结果可以看出,promise中 构造函数是同步执行,进入then或者catch后则是异步执行。

再详细说一下promise的用法:

then可以连续使用,前一个then中的返回值 是下一个then的输入值,请看示例代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>new Promise(function(resolve,reject){resolve("resolvefuc")}).then(function(param){console.log(param);return 7;}).then(function(param){console.log(param)})console.log("我后执行,但是我先输出")</script>
</body>
</html>

输出结果:

或者 拿到promise对象然后执行then:

 <script>var pro=  new Promise(function(resolve,reject){resolve("resolvefuc")})pro.then(function(param){console.log(param);return 7;}).then(function(param){console.log(param)})console.log("我后执行,但是我先输出")</script>

输出结果:

3,async  用法简单,在定义函数是 函数名称前 加上async关键字即可,async函数返回一个promise,但是此时是同步执行,请看实例代码:

 <script>async function print(){console.log("async 函数")}console.log(print())</script>

输出结果如下:

由打印结果可以看出,代码是顺序执行的。

函数返回值再调用then即可开始异步执行。

    <script>async function print(){console.log("async 函数")}print().then(function(){console.log("我在结束后被打印")})console.log("结束")</script>

打印结果如下:

async 和 await

await 就是等待异步处理完成,然后向下执行代码。

    function testAwait() {return new Promise((resolve) => {setTimeout(function () {console.log("testAwait");resolve();}, 1000);});}async function helloAsync() {testAwait();console.log("helloAsync");}helloAsync();

执行结果:

执行结果很明显值先执行

console.log("helloAsync"); 再执行  console.log("restawait");

如果加上await 执行顺序发生变化

执行结果

JavaScript 异步 setTimeout promise async await相关推荐

  1. JavaScript 回调函数/Promise/ async/await

    并发和并行 并行和并发是两个概念,容易混淆是因为并行和并发在中文意思上相近,其实在英文中,这是完全不相同的东西,并行(parallelism).并发(concurrency). 并行(parallel ...

  2. rust异步编程--理解并发/多线程/回调/异步/future/promise/async/await/tokio

    1. 异步编程简介 通常我们将消息通信分成同步和异步两种: 同步就是消息的发送方要等待消息返回才能继续处理其它事情 异步就是消息的发送方不需要等待消息返回就可以处理其它事情 很显然异步允许我们同时做更 ...

  3. Promise async/await的理解和用法

    Promise && async/await的理解和用法 为什么需要promise(承诺)这个东西 在之前我们处理异步函数都是用回调这个方法,回调嵌套的时候会发现 阅读性 和 调试 的 ...

  4. ES6箭头函数以及promise/async/await测试案例

    ES6箭头函数的运用 下面以一段代码解释 function one(){return 1 以上函数用箭头函数写步骤,参考下面代码 {}和里面的东西先删去 one = (里面写参数/无参数的里面为空)= ...

  5. js callback promise async await 几种异步函数处理方式

    ***callback  这个是最常用的也是最简单的 ,比如在ajax网络请求中,返回请求完成返回的数据 回调函数就是把一个函数当成另一个函数的参数,可以传递函数内的局部变量,也可以异步完成一些操作, ...

  6. 如何在 JavaScript 循环中使用 async/await

    在循环中迭代循环项和处理异步逻辑(即API调用),可能是我们作为JavaScript开发人员必须执行的两个最常见的任务.本文将讨论的是组合async/await和迭代逻辑的最佳方法. 有时候,你会希望 ...

  7. 【面试题】前端人70%以上 不了解的promise/async await

    前言   今天给大家分享promise,笔者将从早期的异步代码的困境.promise出现解决了什么问题.异步回调地狱的终极方案并且实现async await的核心语法,其实async/await只是g ...

  8. JS实现sleep,普通版+promise+async/await

    1-1 普通版 function sleep() {var start = new Date()while(new Date() - start <= sleepTime) {}var t1 = ...

  9. JavaScript异步与Promise基本用法(resolve与reject)

    Promise解决的问题 相信每个前端都遇到过这样一个问题,当一个异步任务的执行需要依赖另一个异步任务的结果时,我们一般会将两个异步任务嵌套起来,这种情况发生一两次还可以忍,但是发生很多次之后,就形成 ...

最新文章

  1. php获取搜索框的函数,php获取搜索引擎入站关键词的函数
  2. 词法分析器的设计与实现
  3. zabbix3.4搭建钉钉报警
  4. 设置progressbar进度条颜色
  5. pthread_t描述说明
  6. NYOJ82-迷宫寻宝1
  7. fiddler网站请求被拦截怎么恢复?
  8. SQL to ElasticSearch DSL改进
  9. Windows下使用luaDoc给lua生成文档
  10. 隐私模型:k-anonymity l-diversity t-closeness介绍
  11. 箱形图在实际数据分析中的应用
  12. 设计一个自我介绍简单页面
  13. RabbitMQ服务启动就自动停止解决方案
  14. 五种提前还款方式那种更划算
  15. 欧拉公式推导(e^iπ+1=0)
  16. 猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
  17. 2021第二届大海道越野耐力赛暨中国汽车越野锦标赛分站赛
  18. 【2020.11.4 洛谷团队赛 普及组】T1 U138644 小Biu的礼物
  19. Kafka系统介绍及高性能原理
  20. 区块链开发者招聘:IOST开发者计划

热门文章

  1. 嵌入式QT操作LED的方法
  2. 基于emq x开源版实现服务重启后主题和消息恢复的完整方案
  3. momentjs转换格式_Moment.js+Vue过滤器的使用,各种时间格式转换为YYYY-MM-DD HH:mm:ss格式...
  4. 人人商城互动直播使用指南(阿里云服务器、宝塔环境)
  5. 戴尔g3显示自动修复此计算机咋办,戴尔g3如何恢复系统_戴尔笔记本恢复出厂系统的方法...
  6. a标签中onclick事件的用法
  7. JAVA流程控制语句1
  8. HTML中怎么去掉table中th的默认粗体
  9. [NOI2007]生成树计数
  10. Linux中drwxr-xr-x.的意思和权限