对于async异步加载的一些疑问

vimin_M 2019-07-31 11:27:24
不是说async定义的函数时异步加载函数么,但为什么执行下面的代码
async function xunhuan(){
for(var i = 0; i < 1000000000; i++){}
}
var first = new Date().getTime()
xunhuan();
var last = new Date().getTime();
console.log('执行时间:' + (last - first));

打印出来的结果是 执行时间:703

...全文
186 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
讨厌走开啦 2019-08-01
  • 打赏
  • 举报
回复
上面的例子,执行时间会立刻打印,而阻塞时间会在1000ms后打印。
讨厌走开啦 2019-08-01
  • 打赏
  • 举报
回复
await只会阻塞函数内的代码执行,而不是你理解的阻塞所有代码的执行。 给你改了一下,这样容易理解: async function xunhuan(){ await new Promise((res,rej)=>{ setTimeout(() => { return res('I am start') }, 1000); }); var complete = new Date().getTime(); console.log('阻塞时间:' + (complete - first)) return Promise.resolve("success"); } var first = new Date().getTime() xunhuan() var last = new Date().getTime(); console.log('执行时间:' + (last - first));
vimin_M 2019-08-01
  • 打赏
  • 举报
回复
嗯,我试了以下是,是不会阻塞代码的执行的; async function xunhuan(){ var a = await new Promise((res,rej)=>{ setTimeout(() => { return res('I am start') }, 1000); }) console.log(a) return a; } var first = new Date().getTime() xunhuan() var last = new Date().getTime(); console.log('执行时间:' + (last - first)); 结果是: 执行时间:1 I am start
vimin_M 2019-08-01
  • 打赏
  • 举报
回复
哦,是我们需要在async函数体中有返回值的时候,在后面的then中才能实现异步加载的意思么?在async函数体本身里面的代码不是异步加载?那我们在async中使用await的时候不会阻塞代码么?
讨厌走开啦 2019-08-01
  • 打赏
  • 举报
回复
呃 上面贴的代码不对,以这里为准: async function xunhuan(){ return Promise.resolve("success"); } var first = new Date().getTime() xunhuan().then(function (re) { for(var i = 0; i < 1000000000; i++){ } var complete = new Date().getTime(); console.log('实际执行时间:' + (complete - first)); }); var last = new Date().getTime(); console.log('执行时间:' + (last - first));
讨厌走开啦 2019-08-01
  • 打赏
  • 举报
回复
async修饰的函数必须返回一个promise对象,你改成下面这样就正常了: async function xunhuan(){ for(var i = 0; i < 1000000000; i++){ return Promise.resolve("success"); } } 关于async的定义可以参考这里:https://blog.csdn.net/lqlqlq007/article/details/96479546
讨厌走开啦 2019-08-01
  • 打赏
  • 举报
回复
引用 7 楼 爱打代码的猿 的回复:
大概明白了,但像我一开始提问的那样,是因为没有返回值,所有没有办法异步加载么?
你一开始的理解就错了,异步是可以的,但是必须是放在promise.then里才行,或者是放在await后面才行。
vimin_M 2019-08-01
  • 打赏
  • 举报
回复
大概明白了,但像我一开始提问的那样,是因为没有返回值,所有没有办法异步加载么?

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧