【JavaScript】手把手教你写高质量 JavaScript 异步代码!

简介: 前言分享几个我平时写异步代码的小技巧以及我之前看到过得一些不好的写法。

前言

分享几个我平时写异步代码的小技巧以及我之前看到过得一些不好的写法。

手把手教程

reject一个Error对象

reject Promise时强制使用Error对象,方便浏览器底层更容易的分配堆栈以及查找堆栈。

// bad
Promise.reject('error reason');
// good
Promise.reject(new Error('error reason'))
复制代码

不要在Promise上使用async

不要把async函数传递给Promise构造函数,因为没有必要,其次如果async函数异常,那么你的promise并不会reject

// bad
new Promise(async (resolve, reject) => {})
// good
new Promise((resolve, reject) => { async function(){coding....}()})
复制代码

不要使用await在循环中

尽可能将这写异步的任务改为并发,可以大幅提高代码执行效率

// bad
for(const apiPath of paths) {
    const { data } = await request(apiPath)
}
// good
const results = []
for(const apiPath of paths) {
    const res = resquest(apiPath)
    results.push(res)
}
await Promise.all(results)
复制代码

不要再Promise中使用return语句

// bad
new Promise((resolve, reject) => {
    if(isOK) return 'ok'
    return 'not ok'
})
// good
new Promise((resolve, reject) => {
    if(isOK) resolve('ok')
    reject(new Error('not ok'))
})
复制代码

防止回调地狱

// bad
p1((err, res1) => {
    p2(res1, (err, res2) => {
        p3(res2, (err, res3) => {
            p4(res3, (err, res4) => {
                console.log(res4)
            })
        })
    })
})
// good
const res1 = await p1()
const res2 = await p1(res1)
const res3 = await p1(res2)
const res4 = await p1(res3)
console.log(res4)
复制代码

别忘了异常处理

Promise

// bad
asyncPromise().then(() => {})
// good
asyncPromise().then(() => {}).catch(() => {})
复制代码

async aiwat

// bad
const result = await asyncPromise()
// good
try {
    const result = await asyncPrmise()
} catch() {
    // do something
}
复制代码

不要awiat一个非Promise函数

// bad
function getUserInfo() {
    return userInfo
}
await getUserInfo()
// good
async function getUserInfo() {
    return userInfo
}
await getUserInfo()
复制代码

不要将Promise作为判断条件或者参数

async function getUserInfo() {
    return userInfo
}
// bad
if(getUserInfo()) {}
// good
if(await getUserInfo()) {}
// better
const { userInfo } = await getUserInfo()
if(userInfo) {}
复制代码


目录
相关文章
|
26天前
|
JavaScript
短小精悍的js代码
【10月更文挑战第17天】
120 58
|
8天前
|
JSON 前端开发 JavaScript
在 JavaScript 中,如何使用 Promise 处理异步操作?
通过以上方式,可以使用Promise来有效地处理各种异步操作,使异步代码更加清晰、易读和易于维护,避免了回调地狱的问题,提高了代码的质量和可维护性。
|
13天前
|
JavaScript
原生js炫酷随机抽奖中奖效果代码
原生js随机抽奖是一个炫酷的根据数据随机抽奖的代码,该网页可进行随机抽取一个数据,页面动画高科技、炫酷感觉的随机抽奖效果,简单好用,欢迎下载!
31 3
原生js炫酷随机抽奖中奖效果代码
|
18天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤。通过这些工具,可以显著提升编码效率和代码质量。
181 4
|
20天前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
72 6
|
16天前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码。通过安装和配置这些工具,可以确保代码风格一致,提高代码质量和可读性。
47 1
|
1月前
|
JavaScript 前端开发 开发者
如何在 VSCode 中使用 ESLint 和 Prettier 检查并自动格式化 Vue.js 代码,提升团队协作效率和代码质量。
【10月更文挑战第9天】随着前端开发技术的发展,代码规范和格式化工具变得至关重要。本文介绍如何在 VSCode 中使用 ESLint 和 Prettier 检查并自动格式化 Vue.js 代码,提升团队协作效率和代码质量。通过安装插件、配置 ESLint 和 Prettier,以及设置 VSCode,实现代码实时检查和格式化,确保代码风格一致。
29 2
|
1月前
|
前端开发 JavaScript 开发者
JS 异步解决方案的发展历程以及优缺点
本文介绍了JS异步解决方案的发展历程,从回调函数到Promise,再到Async/Await,每种方案的优缺点及应用场景,帮助开发者更好地理解和选择合适的异步处理方式。
|
1月前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查并自动格式化 Vue.js 代码,提升代码质量和团队协作效率。
【10月更文挑战第8天】本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查并自动格式化 Vue.js 代码,提升代码质量和团队协作效率。通过安装 VSCode 插件、配置 ESLint 和 Prettier,实现代码规范检查和自动格式化,确保代码风格一致,提高可读性和维护性。
70 2