一,普通的包含异步的函数
function test(){
console.log("111") setTimeout(()=>{
console.log("222") },1000) console.log("333") } test()
实现的效果:
二,使用promise改写成同步
function timeOut(){
return new Promise((resolve)=>{
setTimeout(()=>{
console.log("222") resolve() },1000) }) } async function test(){
console.log("111") await timeOut() console.log("333") } test()
结果:
> 111 > 222 > 333
三,多层await
function timeOut(){
return new Promise((resolve)=>{
setTimeout(()=>{
console.log("222") resolve() },1000) }) } async function test(){
console.log("111") await timeOut() console.log("333") } function test2(){
console.log("0000") test() console.log("4444") } test2()
因为test2中的test里面虽然有await,但是test2中却没有,而test里有异步,所以会先执行同步代码,先000,再111,就直接到444了。
> 0000 > 111 > 4444 > 222 > 333
三,多层await,同步需要使用await
function timeOut(){
return new Promise((resolve)=>{
setTimeout(()=>{
console.log("222") resolve() },1000) }) } async function test(){
console.log("111") await timeOut() console.log("333") } async function test2(){
console.log("0000") await test() console.log("4444") } test2()
这里主要就是把test2中的异步也是用await来处理了,因为其内部还是用了await,await返回是个resolve的promise对象,所以这里的await也是生效的。
也就是说await只会把该作用域下的异步代码转化为同步,如果外层还是需要同步执行,则还需要一个await
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rgzn-aibigd/10993.html