JavaScript (JS) 是一种单线程执行的编程语言,因此在处理复杂或耗时的任务时,如果采用同步编程方式,则会让浏览器或服务器阻塞,导致用户体验变差或性能下降。
异步编程可以解决这个问题。它使得可以同时处理多个任务,不需要等待某些操作完成再执行下一个操作,而是立即将控制权返回给调用者。当相应的操作完成时,异步函数会调用回调函数或Promise对象的then()方法,并在事件队列中排队等待执行,从而实现非阻塞式的并发执行。
以下是两种异步编程实现的方式:
一.Promise.all 实现
methodExec() {
// 1.定义一个Array存储调用方法后的数据
const promiseArray = []
// 2.将要异步执行的两个方法添加到Array中
promiseArray.push(
fun1(),
fun2()
)
// 3.使用 Promise.all() + .then() 等待方法返回结果都返回,然后获取异步调用的方法的信息
Promise.all(promiseArray).then((result) => {
console.log(result[0])
console.log(result[1])
})
}
async methodExec() {
// await等待Promise.all()返回全部数据,方法和效果跟上面一模一样
let [fun1Data,fun2Data] = await Promise.all([fun1(),fun2()]);
}
二.async/await 实现
// async 是一个关键字,定义异步函数
async methodExec() {
// 定义变量接收方法fun1()和fun2()的返回值,此时fun1()的执行不阻塞fun2()
let fun1Promise = fun1()
let fun2Promise = fun2()
// await 是一个关键字,可以等到fun1Promise和fun2Promise接受到返回值后才赋值到fun1Data和fun2Data
let fun1Data = await fun1Promise;
let fun2Data = await fun2Promise;
}