-
-
Save Ebycow/90a8aec48eca72b3819adfcd4f13ad27 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const request = require('request'); | |
/* | |
*** 地獄な例 *** | |
*/ | |
// ここにgoogleのページをブチ込みたい | |
let webData = null; | |
request('https://google.com/', (err, res, body) => { | |
webData = body; | |
}); | |
console.log(webData); // null ムリ。 | |
// console.logされるタイミングが、手前のrequestの完了を待ってくれないイメージ | |
// 取得した後に処理をしたければ、原則として以降の全ての処理はコールバックの中に書くことになる🙀 | |
/* | |
*** async / await と Promiseを使う例 *** | |
*/ | |
// async即時関数(awaitはasyncの中でしか使えないんで) | |
(async () => { | |
/* | |
非同期関数(返り値としてPromise< >がreturnされてる関数)を、await キーワードを付けて実行すると | |
そいつのresolve()が呼ばれるまで次の処理に行くのを待ってくれるようなイメージ | |
*/ | |
webData = await new Promise((resolve, reject) => { | |
request('https://google.com/', (err, res, body) => { | |
// エラーはrejectに渡す | |
if(err) { reject(err) }; | |
// 処理が完了したらresolveを叩く, 値を渡すこともできる | |
resolve(body); | |
}); | |
}); | |
console.log(webData); //ちゃんと出る!! | |
})(); | |
// さらに | |
const express = require('express'); | |
const app = express(); | |
// ↓こういうパターンはここにasyncを付けて、そのまま非同期で実行することもできる | |
app.get('/', async (req, res) => { | |
webData = await new Promise((resolve, reject) => { | |
request('https://google.com/', (err, res, body) => { | |
if(err) { reject(err) }; | |
resolve(body); | |
}); | |
}); | |
res.send(webData); | |
}); | |
/* | |
モジュール化 | |
*/ | |
// モジュール側 | |
const moment = require('moment'); | |
const Datastore = require('nedb'); | |
const db = new Datastore(); | |
// ↓ 非同期関数として用意(return Promise< > の時点で実はこれいらないけど可読性のあれ) | |
exports.extraction = async () => { | |
let currentDate = moment().format('YYY-MM-DD'); | |
return new Promise((resolve, reject) => { | |
db.find({ reservationDate : currentDate }, (err, docs) => { | |
if(err) { reject(err) }; | |
resolve(docs); | |
}); | |
}); | |
} | |
// 使う側のスクリプト | |
const getReservationDocs = require('./index').extraction; | |
(async () => { | |
const reservationsDocs = await getReservationDocs(); | |
console.log(reservationsDocs); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment