转:标注执行顺序
async function async1() { console.log('async1 start');//2 await async2(); console.log('async1 end');//7 } async function async2() { console.log('async2');//3 } console.log('script start');//1 setTimeout(function () { console.log('setTimeout');//8 },0); async1(); new Promise ( function (resolve) { console.log( 'promise1' );//4 resolve(); }).then(function () { console.log('promise2');//6 }); console.log( 'script end' );//5
分析一下 await async2()
await,它先计算出右侧的结果,然后看到await后,中断async函数:
-
先得到await右侧表达式的结果。执行
async2()
,打印同步代码console.log('async2')
,并且returnPromise.resolve(undefined)
。 -
await后,中断async函数,先执行async外的同步代码。
目前就直接打印 console.log('async2')
:
被阻塞后,要执行async之外的代码。
相关推荐
js代码-promise, setTimeout, async, await 输出顺序题
前言 在平常的项目开发中肯定会遇到同步异步执行的问题...3.当然es6中的promise倒是很好的解决了这样的问题,再配合es7的async和await就更完美了,await返回的也是一个promise对象,这个关于promise和async,await的使
关于async的介绍,在阮一峰的ES6入门教程中说到: async 函数是什么?一句话,它就是 Generator 函数的语法糖。 可是,为什么这么说呢? 首先,比如说有一个异步操作,使用 async/await 语法来以同步模拟异步操作...
native async/await将使用native promise zone.js ,因此zone.js无法控制其生命周期。 像下面的代码将无法正常工作。 async function syncTest ( ) { console . log ( 'async Function' ) ;}async function ...
耗时操作或nodejs没有提供异步模式的api(例如解密、同步的文件api)都可以在线程池中执行,业务代码只需要返回一个Promise或async函数给线程池库,至于业务逻辑做什么操作,其实都可以,比如setTimeout,异步操作,...
我们经常会遇到这样的麻烦事,多个函数按顺序执行,返回结果却不是我们预期的顺序,原因一般是由于异步操作引起的,所以呢,我们需要一种解决方案来处理这种问题,从而使得异步操作按照同步的方式来执行,这样我们就可以...
关于异步方案, ES6 先是出现了 基于状态管理的 Promise,然后出现了 Generator 函数 + co 函数,紧接着又出现了 ES7 的 async + await 方案。 本文力求以最简明的方式来疏通 async + await。 异步编程的几个场景 先...
async/await 语法用看起来像写同步代码的方式来优雅地处理异步操作,但是我们也要明白一点,异步操作本来带有复杂性,像写同步代码的方式并不能降低本质上的复杂性,所以在处理上我们要更加谨慎, 稍有不慎就可能写出不是...
---然后跳出整个async1函数来执行后面js栈的代码 <li>4.console.log("promise1-111"); 异步任务顺序: <li>1.回到async1函数中等待await后面表达式的返回值 <li>2.promise的.then() <li>3.setTimeout()</li>
在没有它之前,javascript中的异步处理,大多是利用回调函数来实现的。典型的几种如下:(1)setTimeout (2)ajax(3)nodejs中的文件读取。现在有了promise,就可以对这些异步操作进行改写了。 主要学习内容 ● ...
Promise和co都搞过了,终于还是忍不住要折腾,上ES7的终极方案:async/await。 async/await也是和Promise配合使用的, 先来看一下示例代码,这个用法和我们之前讲的co的用法是极其相似的: function myAsyncFunc() { ...
前者使用了generator来进行异步操作,后者则用了最新的async/await方案 一开始使用这种写法的时候,我遇到一个问题,代码如下: const Koa = require('koa'); const app = new Koa(); const doSomething = time => ...
标准Javascript»setInterval()间隔承诺»interval()安装npm install interval-promise用法使用async-await的简单示例const interval = require ( 'interval-promise' )// Run a function 10 times with 1 ...
JS中的数据类型及区别、三种数据类型检测方法、var && let && const区别、垃圾回收机制、作用域和作用域链、闭包特性作用场景、this指向问题、原型 和 原型链、new运算符实现机制、EventLoop 事件循环、setTimeout、...
快速示例: import { resilient, timed, throttled } from 'async-await-utils/hof'; const randomlyFailing = () => new Promise((resolve, reject) => Math.random() > 0.5 ? reject() : resolve()); const ...
loader 可以只在打包后的代码自动注入 try/catch,使得业务代码非常简洁async function func() { let res = await new Promise(resolve => { setTimeout(() => { resolve('success') }, 3000) })}打包后自动注入 try...
@ jfet97 / csp 在async/await和异步可迭代接口的基础上构建的用于通信顺序进程的库。安装该库需要async/await和for-await-of支持。 $ npm install --save @jfet97/csp文件您可以在找到文档。用法示例下面是一个简单...
一个用于在Node.js中通信顺序流程的库,该库建立在async/await和AsyncIterable 。 安装 该库需要在Node.js运行时中支持async/await ,因此理想情况下为node>=7.4 。 $ npm install --save @f5io/csp 或者 $ yarn ...
步骤1:编写模型actions / count.js export default ( dispatch ) => ( { async increment ( ) { await new Promise ( resolve => setTimeout ( resolve , 1000 ) ) // add your dispatch here } ,} ) 动作/ index....