Skip to content

Instantly share code, notes, and snippets.

@Ebycow
Last active March 13, 2019 16:18
Show Gist options
  • Save Ebycow/90a8aec48eca72b3819adfcd4f13ad27 to your computer and use it in GitHub Desktop.
Save Ebycow/90a8aec48eca72b3819adfcd4f13ad27 to your computer and use it in GitHub Desktop.
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