From 63bc7d0405027b0c5b80f4ea3f26d6582d662780 Mon Sep 17 00:00:00 2001 From: Ayamoto Kohei Date: Sat, 9 Oct 2021 19:28:30 +0900 Subject: [PATCH] =?UTF-8?q?add:=20=E5=90=8C=E6=9C=9F=E5=87=A6=E7=BD=AE?= =?UTF-8?q?=E3=81=AE=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 38 ++++++++++++++++++++++++- promise.-test.js | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 promise.-test.js diff --git a/app.js b/app.js index 5b239dd..646496f 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,30 @@ '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', () => {}); @@ -8,4 +32,16 @@ for (let count = 0; count < 500; count++) { fs.appendFile(fileName, 'え', 'utf8', () => {}); fs.appendFile(fileName, 'お', 'utf8', () => {}); fs.appendFile(fileName, '\n', 'utf8', () => {}); -} \ No newline at end of file +} +*/ + +/* +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'); +} +*/ \ No newline at end of file diff --git a/promise.-test.js b/promise.-test.js new file mode 100644 index 0000000..9fe5b71 --- /dev/null +++ b/promise.-test.js @@ -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); // 今日の日付に関する文章が出力される + }); + }); +}); \ No newline at end of file