【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) {}
复制代码


目录
相关文章
|
10天前
|
JavaScript 前端开发 Python
用python执行js代码:PyExecJS库
文章讲述了如何使用PyExecJS库在Python环境中执行JavaScript代码,并提供了安装指南和示例代码。
54 1
用python执行js代码:PyExecJS库
|
6天前
|
编解码 前端开发 JavaScript
javascript检测网页缩放演示代码
javascript检测网页缩放演示代码
|
8天前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
9天前
|
存储 JavaScript 前端开发
webSocket+Node+Js实现在线聊天(包含所有代码)
文章介绍了如何使用WebSocket、Node.js和JavaScript实现在线聊天功能,包括完整的前端和后端代码示例。
42 0
|
5天前
|
存储 JavaScript 前端开发
改进JavaScript代码,给水果有序赋色
改进JavaScript代码,给水果有序赋色
|
7天前
|
存储 JSON JavaScript
JavaScript帮我编写快递自动分拣的代码,区分省份市区县城乡镇
JavaScript帮我编写快递自动分拣的代码,区分省份市区县城乡镇在JavaScript中编写一个用于快递自动分拣的代码,区分省份、市区、县、城乡镇,通常意味着你需要一个数据结构来存储这些地理区域的信息,并编写逻辑来根据快递地址中的信息将其分配到正确的分类中。 这里,我将提供一个简化的示例,说明如何使用JavaScript对象和函数来实现这一功能。请注意,这个示例是高度简化的,并且假设你已经有了某种方式(如正则表达式或API调用)来从快递地址中提取省份、市区、县等信息。 ----------------------------------- ©著作权归作者所有:来自51CTO博客作者goS
|
8天前
|
JavaScript 前端开发 Python
python执行js代码
本文档详细介绍如何安装Node.js环境及PyExecJS库,并提供示例代码展示其功能。首先,通过指定链接安装Node.js,安装完毕后可在命令行中输入`node --version`来验证安装是否成功。接着,使用`pip install PyExecJS`安装PyExecJS库,该库允许Python程序执行JavaScript代码。文档还提供了多个示例代码,展示了如何在Python环境中执行和编译JavaScript代码,并可以选择特定的JavaScript运行时环境,如Node.js或JScript。最后,通过具体案例展示了PyExecJS的功能与使用方法。
16 3
|
17天前
|
JavaScript
网站内容禁止复制的js代码
网站内容禁止复制的js代码
|
23天前
|
缓存 JavaScript 前端开发
js和html代码一定要分离吗
JavaScript(JS)和HTML代码的分离虽非绝对必要,但通常被推荐
|
6天前
|
C++ Windows
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
HTML+JavaScript构建C++类代码一键转换MASM32代码平台