zoukankan      html  css  js  c++  java
  • Koa2学习(二)async/await

    Koa2学习(二)async/await

    koa2中用到了大量的async/await语法,要学习koa2框架,首先要好好理解async/await语法。
    async/await顾名思义是一个异步等待的语法,是es7中为了实现用同步的方式写异步方法的一种新式语法。

    async

    我们再来看看async到底是一个什么语法:

    普通的方法:

    function syncF() {
    	return 'I am a sync result'
    }
    let sync_result = syncF()
    
    console.log(sync_result)
    

    结果:

    I am a sync result
    

    同步方法立即返回结果,大家都懂,就不解释了。

    async的方法:

    async语法 是 一个加持在函数定义时的声明:

    async function asyncF() {
    	return 'I am a async result'
    }
    let async_result = asyncF()
    
    console.log(async_result)
    

    结果:

    Promise { 'I am a asyncSync result' }
    

    我们看到执行async的函数时,返回的是一个promise对象,既然是promise对象, 那就好理解了。
    promise对象肯定会有一个then方法,用于处理异步结果,我们来试试:

    async_result.then((res) => {
    	console.log(res)
    })
    

    结果:

    I am a asyncSync result
    

    promise执行的结果会在then里面返回,没有问题。

    await

    await必须结合async来使用,顾名思义,是async wait (等待异步)的意思。

    // 定义一个耗时3秒返回结果的函数
    function delayF() {
    	return new Promise(resolve => {
    		setTimeout(() => {
    			resolve('I am a async result')
    		}, 3000)
    	})
    }
    // 定义一个async函数
    async function testAwait() {
    	let start = Date.now()
    	console.log(await delayF())
    	console.log(`cost ${Date.now() - start} ms`)
    }
    testAwait()
    

    结果:

    I am a async result
    cost 3002 ms
    

    await一般在等待async方法执行完毕,但是其实await等待的只是一个表达式,这个表达式在官方文档里说的是Promise对象,可是它也可以接受普通值。

    async function testAsync() {
    	return 'testAsync'
    }
    async function testAwait2() {
    	let time1 = Date.now()
    
    	await '1233'
    	let time2 = Date.now()
    	console.log(`cost ${time2 - time1} ms`)
    
    	await delayF()
    	let time3 = Date.now()
    	console.log(`cost ${time3 - time2} ms`)
    
    	await testAsync()
    	let time4 = Date.now()
    	console.log(`cost ${time4 - time3} ms`)
    }
    testAwait2()
    

    结果:

    cost 1 ms
    cost 3002 ms
    cost 1 ms
    

    总结

    • async是声明一个异步的函数,返回一个promise对象。
    • await是等待一个表达式(promise)的返回值执行完毕,必须结合async使用。
    • 写在await后面的方法都会等待await中的异步方法执行完毕之后再执行。
  • 相关阅读:
    LeetCode 39. Combination Sum
    LeetCode 37. Sudoku Solver
    LeetCode 36. Valid Sudoku
    LeetCode 34. Search for a Range
    LeetCode 33. Search in Rotated Sorted Array
    VS2010出现灾难性错误的解决办法
    双系统下利用MbrFix.exe卸载LINUX系统
    VS 与 SQLite数据库 连接
    人月神话阅读笔记2
    关于疫情数据分析web开发2-网页爬取实现
  • 原文地址:https://www.cnblogs.com/shenshangzz/p/9973377.html
Copyright © 2011-2022 走看看