【Node.js入門】バッチ処理をasync/awaitできるようにした

こんにちは。しゃっくです。

先日作成したバッチ処理では非同期なため処理が進んでしまい、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処理を待機できるようになりました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です