Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 37 additions & 1 deletion app.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,47 @@
'use strict';
const fs = require('fs');
const fileName = './test.txt';

// fs.appendFilePromiseをPromiseオブジェクト化
function appendFilePromise(fileName, str) {
return new Promise((resolve) => {
fs.appendFile(fileName, str, 'utf-8', () => resolve());
});
}

// main関数が非同期であることを宣言する
async function main() {
for (let count = 0; count < 500; count++) {
// await演算子を用いて処理が完了するのを待機する
await appendFilePromise(fileName, 'あ');
await appendFilePromise(fileName, 'い');
await appendFilePromise(fileName, 'う');
await appendFilePromise(fileName, 'え');
await appendFilePromise(fileName, 'お');
await appendFilePromise(fileName, '\n');
}
}

main();

/*
for (let count = 0; count < 500; count++) {
fs.appendFile(fileName, 'あ', 'utf8', () => {});
fs.appendFile(fileName, 'い', 'utf8', () => {});
fs.appendFile(fileName, 'う', 'utf8', () => {});
fs.appendFile(fileName, 'え', 'utf8', () => {});
fs.appendFile(fileName, 'お', 'utf8', () => {});
fs.appendFile(fileName, '\n', 'utf8', () => {});
}
}
*/

/*
for (let count = 0; count < 500; count++) {
fs.appendFileSync(fileName, 'あ', 'utf8');
fs.appendFileSync(fileName, 'い', 'utf8');
fs.appendFileSync(fileName, 'う', 'utf8');
fs.appendFileSync(fileName, 'え', 'utf8');
fs.appendFileSync(fileName, 'お', 'utf8');
fs.appendFileSync(fileName, '\n', 'utf8');
}
*/
72 changes: 72 additions & 0 deletions promise.-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
'use strict';

/*
// 1秒待機する非同期処理
const waitPromise = new Promise((resolve, reject) => {
// 1000ミリ秒経過後にコールバック関数が呼ばれる
setTimeout(() => resolve(), 1000);
});

waitPromise.then(() => console.log('hoge'));
console.log('fuge');
*/

/* コールバック地獄になってしまう書き方
new Promise((resolve) => {
// new Date()の結果を次のthenに渡す
const nowDate = new Date();
resolve(nowDate);
}).then((v1) => { // v1は現在の時刻情報
// 日付の情報のみ抽出する
new Promise((resolve) => {
const monthAndDate = {
month: v1.getMonth(),
date: v1.getDate()
}
resolve(monthAndDate);
}).then((v2) => { // v2は日付の情報
// 文章に整形する
new Promise((resolve) => {
const text = `今日は${v2.month+1}月${v2.date}日です。`;
resolve(text);
}).then((v3) => { // v3は日付を示す文章
// 結果をコンソールに出力する
console.log(v3); // 今日の日付に関する文章が出力される
});
});
});
*/

/**
* プロミスチェインを意識した書き方
*/
new Promise((resolve) => {
// new Date()の結果を次のthenに渡す
const nowDate = new Date();
resolve(nowDate);
})
.then((v1) => { // v1は現在の時刻情報
// 日付の情報のみ抽出する
new Promise((resolve) => {
const monthAndDate = {
month: v1.getMonth(),
date: v1.getDate()
}
return new Promise((resolve => {
resolve(monthAndDate);
}));
})
.then((v2) => { // v2は日付の情報
// 文章に整形する
new Promise((resolve) => {
const text = `今日は${v2.month+1}月${v2.date}日です。`;
return new Promise((resolve) => {
resolve(text);
});
})
.then((v3) => { // v3は日付を示す文章
// 結果をコンソールに出力する
console.log(v3); // 今日の日付に関する文章が出力される
});
});
});