こんにちは。しゃっくです。
先日作成したバッチ処理では非同期なため処理が進んでしまい、request処理の処理結果を待機できておりませんでした。
なので、今回はrequest処理を待機できるようにしていきます。
先日のおさらい
先日のバッチ処理のソースです。
ソースは今回の検証用に少し書き換えてあります。
const request = require('request');
const param1 = {
url: 'https://www.google.com/',
method: 'GET'
}
function requestNonPromise(param){
return request(param, function(err, res, body) {
if (err) {
console.log(err);
} else {
console.log(res.statusCode);
}
});
}
console.log('param1開始');
const result = nonAsyncRequest(param1);
console.log('param1完了');
実行結果
C:\Users\shakku\testBatch>node index.js
param1開始
param1完了
200
実行結果4行目の「200」は、index.jsの13行目で出力しているstatusCodeとなります。
つまり、 index.jsの19行目の処理は処理結果を待機せずに、20行目の「param1完了」が先に実行されていることとなります。
今回はこの19行目の処理を待機できるようにしていきます。
async/await
index.jsを以下のように変更
const request = require('request');
const param1 = {
url: 'https://www.google.com/',
method: 'GET'
}
const requestPromise = (param) => {
return new Promise((resolve, reject) => {
request(param, function(err, res, body){
if(err){
console.log(err.errno);
reject('ページを取得できませんでした');
} else {
console.log(res.statusCode);
resolve('ページを取得できました');
}
});
});
}
const main = async() => {
console.log('param1開始');
const result = await requestPromise(param1);
console.log('param1完了');
};
main();
変更点
- request処理の関数(requestPromise)でPromiseオブジェクトを返却するよう変更。
- request処理をawait呼び出すために、main関数をasyncで宣言。(awaitはasync宣言しないと使用できない)
- request処理をawaitで呼び出し。
実行結果
C:\Users\shakku\testBatch>node 3_index.js
param1開始
200
param1完了
request処理を待機できるようになりました。