并发处理
使用 Promise 而非回调函数
回调函数不够简洁且会导致代码过度嵌套。自 ES2015/ES6 起,Promise 已作为内置全局类型提供。建议使用!
不推荐:
javascript
import { get } from "request";
import { writeFile } from "fs";
get(
"https://en.wikipedia.org/wiki/Robert_Cecil_Martin",
(requestErr, response, body) => {
if (requestErr) {
console.error(requestErr);
} else {
writeFile("article.html", body, writeErr => {
if (writeErr) {
console.error(writeErr);
} else {
console.log("File written");
}
});
}
}
);推荐:
javascript
import { get } from "request-promise";
import { writeFile } from "fs-extra";
get("https://en.wikipedia.org/wiki/Robert_Cecil_Martin")
.then(body => {
return writeFile("article.html", body);
})
.then(() => {
console.log("File written");
})
.catch(err => {
console.error(err);
});Async/Await 比 Promise 更为简洁
Promise 是回调函数的有效替代方案,但 ES2017/ES8 引入的 async 和 await 提供了更简洁的解决方案。开发者只需在函数前添加 async 关键字,即可使用命令式语法编写逻辑,无需通过 then 方法链式调用。建议优先采用此方案,以充分发挥 ES2017/ES8 语言特性的优势!
不推荐:
javascript
import { get } from "request-promise";
import { writeFile } from "fs-extra";
get("https://en.wikipedia.org/wiki/Robert_Cecil_Martin")
.then(body => {
return writeFile("article.html", body);
})
.then(() => {
console.log("File written");
})
.catch(err => {
console.error(err);
});推荐:
javascript
import { get } from "request-promise";
import { writeFile } from "fs-extra";
async function getCleanCodeArticle() {
try {
const body = await get(
"https://en.wikipedia.org/wiki/Robert_Cecil_Martin"
);
await writeFile("article.html", body);
console.log("File written");
} catch (err) {
console.error(err);
}
}
getCleanCodeArticle()