async和await的作用,async与await的作用

http://www.itjxue.com  2023-01-16 17:08  来源:未知  点击次数: 

js async和await的用法

async 是一个修饰符,被它定义的函数会默认的 返回 一个 Promise 的 resolve的值。

因此对 async 函数可以直接进行 then 操作,返回的值即为 then() 方法的传入函数。

await 同 async 一样,作为修饰符,但是它只能放在 async 内部使用。

它是 获取 Promise 中返回的内容, 即这个 Promise 函数中 resolve 或者 reject 的值。

所以,async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。

如下例:

比如说,这样一个场景:等待三个数据结果都返回,计算它们的和

谈谈 async/await 的使用方式和场景

async 是用来修饰函数的声明, 使用async 修饰的函数会变成一个异步函数. await 用来修饰函数的调用, 被 await 修饰的函数必须返回一个promise 异步对象, 使用 await 修饰后, 就会将 promise 异步对象转换成一个同步操作.

async await和promise区别是什么?

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

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

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

async/await的背后

async/await是一种编写异步代码的新方法。在这之前编写异步代码使用的是回调函数和promise。

async/await实际是建立在promise之上的。因此你不能把它和回调函数搭配使用。async/await可以使异步代码在形式上更接近于同步代码。这就是它最大的价值。

假设有一个getJSON方法,它返回一个promise,该promise会被resolve为一个JSON对象。我们想要调用该方法,输出得到的JSON对象,最后返回"done"。

async/await的使用

其实你要实现一个东西之前,最好是先搞清楚这两样东西

async/await 的用处就是: 用同步方式,执行异步操作 ,怎么说呢?举个例子

比如我现在有一个需求:先请求完 接口1 ,再去请求 接口2 ,我们通常会这么做

或者我现在又有一个需求:先请求完 接口1 ,再拿 接口1 返回的数据,去当做 接口2 的请求参数,那我们也可以这么做

其实这么做是没问题的,但是如果嵌套的多了,不免有点不雅观,这个时候就可以用 async/await 来解决了

还是用刚刚的例子

需求一:

需求二:

其实就类似于生活中的 排队 ,咱们生活中排队买东西,肯定是要上一个人买完,才轮到下一个人。而上面也一样,在 async 函数中, await 规定了异步操作只能一个一个排队执行,从而达到 用同步方式,执行异步操作 的效果,这里注意了: await只能在async函数中使用,不然会报错哦

刚刚上面的例子 await 后面都是跟着异步操作 Promise ,那如果不接 Promise 会怎么样呢?

可以看出,如果 await 后面接的不是 Promise 的话,其实是达不到 排队 的效果的

说完 await ,咱们聊聊 async 吧, async 是一个位于function之前的前缀,只有 async函数 中,才能使用 await 。那 async 执行完是返回一个什么东西呢?

可以看出, async函数 执行完会自动返回一个状态为 fulfilled 的Promise,也就是成功状态,但是值却是undefined,那要怎么才能使值不是undefined呢?很简单,函数有 return 返回值就行了

可以看出,此时就有值了,并且还能使用 then方法 进行输出

总结一下 async/await 的知识点

JS async和await关键字

async是es7新增的关键字,用于定义异步函数。通过async定义的函数返回一个Promise对象,可以通过 .then 的形式调用。await是等待 async 的异步执行,而且只能在 async 里面定义。

语法示例

async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。

async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。

await 通常用于操作一个Promise对象,返回Promise对象的处理结果,如果不是Promise对象,则返回值本身。

await 也可以跟其他值,如字符串,布尔值,数值以及普通函数。

Dart中的async await

看了很多网上的例子,很简单的东西但是有人把它写的超级复杂。。。。。所以记录一下

async:标记某个方法为异步方法(耗时方法),在声明方法的时候使用

await:等待某个异步方法执行完毕。是“等待”,所以要在调用耗时方法的时候使用

1.首先执行fun1()

2.执行fun2(),输出fun2 pre

这里fun2()没有继续执行,要等待 await Future.delayed(Duration(seconds: 2)); 执行完毕

或者说fun2()内部阻塞在这里

fun2()没有用-await-修饰,所以不需要等待,main方法继续走

3.执行fun3()

4.执行fun4(),开始执行 Future.delayed

fun4内部的Future.delay也是一个耗时方法,但是没有用await修饰,所以不等待,直接输出fun4

注意和fun2的区别

等两秒(也就是 await Future.delayed(Duration(seconds: 2)) )执行完,输出fun 2 after

fun2执行完毕

继续等3秒,fun4内部的 Future.delayed(Duration(seconds: 5)) 执行完

fun4完

整个main方法执行完,退出

还不明白的可以在fun2前面加个await再试一下

(责任编辑:IT教学网)

更多

推荐其他营销文章