刚学了 async 和await 都说是为了解决比较耗时操作时防止页面卡死的异步方法。
可是我测试了一下,为什么页面还是会卡死,是我的用法不对么?
JS代码:
执行结果:
打印 "begin" 是立马出现的,但是打印 "end"是2秒后才出现,而且这2秒期间页面也是 “卡死” 状态。
所以我加了 async 好像跟没加的效果是一样的。
我的期望是:
执行后 begin 和 end 会立马出现,而 "完成" 会等待执行结束后出现,并且页面不会 卡死。
这个要如何解决呢?
题主你好,你的用法没有任何问题,async await 是promise的语法糖,他的作用并不是为了防止页面卡死,他的作用是为了让异步变成同步的感觉,像我们的setEdit函数中触发setEditRow函数,按说setEditRow函数两秒后才执行完成 而congsole a应该先执行,但是因为我们加入了async await 所以 console.log(a)会等到setEditRow执行完成后进行执行
你如果想要end立马出现应该将end放到setEdit()上面,await 的意思就是等待完成,在setEditRow()返回之前下面的代码会一直处于阻塞状态
async await语法糖,await后面接收的要是promise对象,你使用方法错了,你可以这么试下
function test(){
console.log('start')
test2()
console.log('end')
}
async function test2() {
var a = await test3()
for(let i=0;i<99999;i++){
for(let j=0;j<99999;j++){
}
}
console.log('完成')
}
function test3(){
let p = new Promise((resolve,reject) => {
resolve('resolve')
reject('reject');
});
}
test()
如有帮助,麻烦点个【采纳此答案】 谢谢啦~
function test() {
console.log('begin')
setEditRow()
console.log('end')
}
async function setEditRow() {
var b
for (var i = 0; i < 1000; i++) {
for (var j = 0; j < 1000; j++) {
b += await sum(i, j)
}
}
console.log('完成')
}
function sum(a, b) {
return a + b
}
test()