跳到主要内容

代码规范

异步

callback

callback 进行错误处理
// ❌
function callback(err, data) {
console.log(data);
}

// ✅
function callback(err, data) {
if (err) {
console.log(err);
return;
}

console.log(data);
}

promise

Promise 不使用 async
// ❌
new Promise(async (resolve, reject) => {});

// ✅
new Promise((resolve, reject) => {});
Promise 中不使用 return
// ❌
new Promise((resolve, reject) => {
return result;
});

// ✅
new Promise((resolve, reject) => {
resolve(result);
});
reject 抛出 error
// ❌
Promise.reject("An error occurred");

// ✅
Promise.reject(new Error("An error occurred"));
总是使用 catch
// ❌
myPromise().then(() => {});

// ✅
myPromise()
.then(() => {})
.catch(() => {});

await/async

避免 await 结合使用的赋值操作
// ❌
let totalPosts = 0;
async function getPosts(userId) {
const users = [
{ id: 1, posts: 5 },
{ id: 2, posts: 3 },
];
await sleep(Math.random() * 1000);
return users.find((user) => user.id === userId).posts;
}
async function addPosts(userId) {
totalPosts += await getPosts(userId);
}
await Promise.all([addPosts(1), addPosts(2)]);
console.log("Post count:", totalPosts); // 3 or 5

// ✅
let totalPosts = 0;
async function getPosts(userId) {
const users = [
{ id: 1, posts: 5 },
{ id: 2, posts: 3 },
];
await sleep(Math.random() * 1000);
return users.find((user) => user.id === userId).posts;
}
async function addPosts(userId) {
const posts = await getPosts(userId);
totalPosts += posts; // variable is read and immediately updated
}
await Promise.all([addPosts(1), addPosts(2)]);
console.log("Post count:", totalPosts);
避免使用 return await
// 👎
async () => {
try {
return await getUser(userId);
} catch (error) {
// Handle getUser error
}
};

// 👍
async () => {
try {
const user = await getUser(userId);
return user;
} catch (error) {
// Handle getUser error
}
};
循环中不使用 await
// ❌
for (const url of urls) {
const response = await fetch(url);
}

// ✅
const responses = [];
for (const url of urls) {
const response = fetch(url);
responses.push(response);
}

await Promise.all(responses);