async await函数的解释

这篇博客探讨了使用async函数加载图片的过程,通过示例展示了如何计算加载时间,并输出加载图片所花费的毫秒数。文章着重于理解异步操作在JavaScript中的应用以及性能监控的重要性。
async function getImg(url=''){
    await fetch(url) //加载图片
}

async function fn() {
    const url='https://www.imooc.com/static/img/index/logo2020.png'
    const start=Date.now() //记录当前时间
    await getImg(url) //调动,加载图片
    const ms=Date.now()-start  //计算时间差
    console.log(`加载图片花费了 ${ ms } 毫秒`)
}

async function A(){
    console.log('A 开始')
    await fn()
    console.log('A 结束')
}

A()

执行顺序
1 A开始执行
2 fn
3getImg
4 fn
5 A结束执行

### 使用 `async/await` 在箭头函数中的方法 `async/await` 是 JavaScript 中用于处理异步操作的一种简洁方式,而箭头函数则提供了一种更简短的函数书写语法。两者结合使用可以写出更清晰、可读性更高的代码。 #### 1. 在箭头函数中使用 `async/await` 要在箭头函数中使用 `async/await`,首先需要将箭头函数声明为 `async` 函数。这样就可以在该函数体内使用 `await` 关键字来等待异步操作的完成。 ```javascript const fetchData = async () => { try { const response = await fetch('https://api.example.com/data'); const data = await response.json(); console.log(data); } catch (error) { console.error('Error fetching data:', error); } }; fetchData(); ``` 在这个例子中,`fetchData` 是一个箭头函数,并且被声明为 `async` 函数。内部使用 `await` 来等待 `fetch` 请求的结果,然后再解析 JSON 数据。如果发生错误,会通过 `try...catch` 块捕获并输出错误信息。 #### 2. 在数组方法中使用 `async/await` 有时需要在数组的迭代方法(如 `forEach`、`map` 等)中使用 `async/await`。需要注意的是,这些方法的回调函数通常不是 `async` 函数,因此直接在其中使用 `await` 会导致语法错误。解决这个问题的方法是将回调函数声明为 `async` 函数。 ```javascript const arr = [1, 2, 3]; arr.forEach(async (i) => { try { const result = await getPromise(i); console.log(result); } catch (error) { console.error('Error:', error); } }); function getPromise(i) { return new Promise((resolve, reject) => { setTimeout(() => { if (i % 2 === 0) { resolve(`Even number: ${i}`); } else { reject(`Odd number: ${i}`); } }, 1000); }); } ``` 在这个例子中,`forEach` 的回调函数被声明为 `async` 函数,这样就可以在其中使用 `await` 来等待 `getPromise(i)` 返回的 `Promise` 对象的结果。 #### 3. 使用 `async/await` 与 `map` 结合 如果你希望在 `map` 方法中使用 `async/await`,并且希望得到一个包含所有异步操作结果的数组,可以使用 `Promise.all` 来等待所有的 `Promise` 完成。 ```javascript const arr = [1, 2, 3]; const promises = arr.map(async (i) => { try { const result = await getPromise(i); return result; } catch (error) { console.error('Error:', error); return null; } }); Promise.all(promises).then((results) => { console.log(results); }); function getPromise(i) { return new Promise((resolve, reject) => { setTimeout(() => { if (i % 2 === 0) { resolve(`Even number: ${i}`); } else { reject(`Odd number: ${i}`); } }, 1000); }); } ``` 在这个例子中,`map` 方法返回了一个包含多个 `Promise` 的数组 `promises`。然后使用 `Promise.all` 来等待所有 `Promise` 完成,并将结果存储在 `results` 数组中。 #### 4. 注意事项 - **错误处理**:在使用 `async/await` 时,务必使用 `try...catch` 块来捕获可能的错误。这有助于提高代码的健壮性和可维护性。 - **作用域**:确保 `await` 关键字仅在 `async` 函数内部使用,否则会导致语法错误。 - **性能**:在处理大量异步操作时,注意合理使用 `Promise.all` 等工具来优化性能。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值