並行処理
コールバックではなくプロミスを使用する
コールバックは可読性が低く過剰なネストを引き起こします。ES2015/ES6ではプロミスがグローバルな組み込み型として組み込まれています。プロミスを使用すべきです。
悪い例:
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はプロミスよりもさらに簡潔
プロミスはコールバックに対して非常に簡潔な代替手段ですが、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()