美文网首页
JS 中异步/等待的用法和理解

JS 中异步/等待的用法和理解

作者: 王哈哈zzz | 来源:发表于2022-03-14 22:50 被阅读0次

JavaScript中异步/等待的用法和理解
编程语言中任意一个关键字都是有意义的,我们先从字面意思来理解。

1.async

async 是“异步”的简写,带async关键字的函数,是声明异步函数,返回值是promise对象,如果async关键字函数返回的不是promise,会自动用Promise.resolve()包装。

async function test() {undefined
return ‘hello word’
}
test();

运行上面代码返回结果如下

2.await

await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。

如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。

如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。

我们看下面段代码

function test() {undefined
return new Promise(resolve => {undefined
setTimeout(() => resolve(“hello word”), 2000);
});
}

const result = test();
console.log(result.then((val)=>{console.log(val)}));
console.log(‘结束’)

我们以编辑器编辑器代码执行顺序来理下,

  • 1.首先我们定义一个方法,这个方法返回Promise 对象,.then()函数两秒钟后返回调用成功。

  • 2.接下来实例化test()函数。

  • 3.调用result对象的then()函数,接收返回值,注意,这里是异步的

  • 4.打印日志结束

我们运行代码,看结果

看到先打印“结束”,然后才打印的“hello word”,这就是异步,我们改造下代码

function test() {undefined
return new Promise(resolve => {undefined
setTimeout(() => resolve(“hello word”), 2000);
});
}

const result = await test();
console.log(result);
console.log(‘结束’)

用await关键字接test()函数,看这次返回结果

我们发现先打印“hello word”,然后才打印“结束”,由于test()造成的阻塞,console.log(‘结束’)会等到两秒后执行。

再来说下优缺点

优点:相对于promise,async/await处理 then 的调用链,代码要清晰很多,几乎和同步代码一样。

缺点:滥用 await 可能会导致性能问题,因为 await 会阻塞代码。

相关文章

  • Javascript进阶——异步编程原理

    理解JS异步 同步和异步 同步:调用之后得到结果,再依次执行其他的任务 异步:调用之后可以不等待结果,继续做其他的...

  • js 循环

    js中forEach,for in,for of循环的用法 js的 for...in 和 for...of的用法 ...

  • js中的同步和异步的理解

    你应该知道,javascript语言是一门“单线程”的语言,不像java语言,类继承Thread再来个thread...

  • Javascript语法中的重难点

    0. 前言 记录js使用过程中遇到的重难点。 1. 如何解决异步问题 js中函数调用是异步的,即不等待函数执行结束...

  • es6--async和await

    async 和 await被称为js异步的最终解决方案,那么我们来了解下:async:异步方法, await:等待...

  • 我理解中的JS异步

    温故而知新,有一段时间没复习基础知识,重新学习一下,又获得了新知识。接下来会陆续推出 “我理解中的...” 系列,...

  • JS 异步理解

    一、异步 JS的异步:新开一个子线程,在主线程执行完之后,执行子线程, 第二个参数:时间,代表在子线程中等待执行的...

  • js异步的理解

    js的异步是基于事件驱动的,每一个异步任务完成线程池会有一个事件,js线程完成后,将这些线程池的事件取出执行。这里...

  • JS相关问题记录汇总

    JS异步 JS为单线程 ,而异步的概念则为JS独有 , 某些用户角度来讲不需要等待的事情单线程就会导致任务排队 ,...

  • js笔记

    参考文档 js中的同步和异步的个人理解,单线程,执行栈,任务队列 回调地狱 Callback Hell 什么是作用...

网友评论

      本文标题:JS 中异步/等待的用法和理解

      本文链接:https://www.haomeiwen.com/subject/efdudrtx.html