setTimeout、Promise、Async/Await 的区别

摘要:
可以理解为,是让出了线程,跳出了async函数体。await的含义为等待,也就是async函数需要等待await后的函数执行完成并且有了返回结果之后,才能继续执行下面的代码。await通过返回一个Promise对象来实现同步的效果。

1、setTimeout

console.log('script start')    //1. 打印 script start
setTimeout(function(){
    console.log('settimeout')    //4. 打印 settimeout
})    //2. 调用 setTimeout 函数,并定义其完成后执行的回调函数
console.log('script end')    //3. 打印 script start
//输出顺序:script start->script end->settimeout

2、Promise

Promise本身是同步的立即执行函数, 当在executor中执行resolve或者reject的时候, 此时是异步操作, 会先执行then/catch等,当主栈完成后,才会去调用resolve/reject中存放的方法执行,打印p的时候,是打印的返回结果,一个Promise实例。

console.log('script start')
let promise1 = new Promise(function(resolve) {
    console.log('promise1')
    resolve()
    console.log('promise1 end')
}).then(function() {
    console.log('promise2')
})
setTimeout(function(){
    console.log('settimeout')
})
console.log('script end')
//输出顺序: script start->promise1->promise1 end->script end->promise2->settimeout

3、Async/Await

async functionasync1(){
   console.log('async1 start');
    await async2();
    console.log('async1 end')
}
async functionasync2(){
    console.log('async2')
}
console.log('script start');
async1();
console.log('script end')
//输出顺序:script start->async1 start->async2->script end->async1 end

async 函数返回一个 Promise 对象,当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再执行函数体内后面的语句。可以理解为,是让出了线程,跳出了 async 函数体。

await的含义为等待,也就是 async 函数需要等待await后的函数执行完成并且有了返回结果(Promise对象)之后,才能继续执行下面的代码。await通过返回一个Promise对象来实现同步的效果。

免责声明:文章转载自《setTimeout、Promise、Async/Await 的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇自信息和互信息、信息熵将数据填充到已有的EXECL模板中下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iOS -- MBProgressHUB

高级:http://www.jianshu.com/p/485b8d75ccd4 //只有小菊花 - (void)indeterminateExample { // Show the HUD on the root view (self.view is a scrollable table view and thus not suitable, // as...

彻底理解setTimeout()

  之前在网上看了很多关于setTimeout的文章,但我感觉都只是点到为止,并没有较深入的去剖析,也可能是我脑袋瓜笨,不容易被点解。后面看了《你不知道的javascript-上卷》一书,决定重新再来理一次。这次我觉得我应该整明白了。于是分享给大家,文中解释有错误的部分还希望大家留言指正。 首先我们还是来看那道大家再熟悉不过的前端面试题: for (va...

javascript之函数节流

函数节流原理:   设置一个定时器setTimeout,让执行的函数延缓一段时间之后再去执行,如果在这段时间内,该函数又触发了,那就清除原来的setTimeout,创建一个新的setTimeout,依此类推下去,就执行了函数节流。 函数封装: 1 function throttle(method, context) { 2 clearTimeou...

Spring使用@Async注解

    本文讲述@Async注解,在Spring体系中的应用。本文仅说明@Async注解的应用规则,对于原理,调用逻辑,源码分析,暂不介绍。对于异步方法调用,从Spring3开始提供了@Async注解,该注解可以被标注在方法上,以便异步地调用该方法。调用者将在调用时立即返回,方法的实际执行将提交给Spring TaskExecutor的任务中,由指定的线程...

ES7前端异步玩法:async/await理解

本文转载于:https://www.cnblogs.com/leungUwah/p/7932912.html 说明:怕原作者链接失效,备份一份 在最新的ES7(ES2017)中提出的前端异步特性:async、await。 什么是async、await? async顾名思义是“异步”的意思,async用于声明一个函数是异步的。而await从字面意思上是“等待...

Python-进程与线程

进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等。 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就...