前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JavaScript】手把手教你写高质量 JavaScript 异步代码!

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

作者头像
HoMeTown
发布2022-10-26 08:41:25
1760
发布2022-10-26 08:41:25
举报
文章被收录于专栏:秃头开发头秃了

前言

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

手把手教程

reject一个Error对象

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

代码语言:javascript
复制
// bad
Promise.reject('error reason');

// good
Promise.reject(new Error('error reason'))

不要在Promise上使用async

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

代码语言:javascript
复制
// bad
new Promise(async (resolve, reject) => {})

// good
new Promise((resolve, reject) => { async function(){coding....}()})

不要使用await在循环中

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

代码语言:javascript
复制
// 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语句

代码语言:javascript
复制
// 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'))
})

防止回调地狱

代码语言:javascript
复制
// 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

代码语言:javascript
复制
// bad
asyncPromise().then(() => {})

// good
asyncPromise().then(() => {}).catch(() => {})

async aiwat

代码语言:javascript
复制
// bad
const result = await asyncPromise()

// good
try {
    const result = await asyncPrmise()
} catch() {
    // do something
}

不要awiat一个非Promise函数

代码语言:javascript
复制
// bad
function getUserInfo() {
    return userInfo
}
await getUserInfo()

// good
async function getUserInfo() {
    return userInfo
}
await getUserInfo()

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

代码语言:javascript
复制
async function getUserInfo() {
    return userInfo
}

// bad
if(getUserInfo()) {}

// good
if(await getUserInfo()) {}

// better
const { userInfo } = await getUserInfo()
if(userInfo) {}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秃头开发头秃了 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 手把手教程
    • reject一个Error对象
      • 不要在Promise上使用async
        • 不要使用await在循环中
          • 不要再Promise中使用return语句
            • 防止回调地狱
              • 别忘了异常处理
                • Promise
                • async aiwat
              • 不要awiat一个非Promise函数
                • 不要将Promise作为判断条件或者参数
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档