File size: 5,270 Bytes
e4bf523
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
'use strict'
/**

 * Copyright (c) 2017~2020, OBCon Inc.

 * All rights reserved.

 */

/**

 * @file

 * @copyright 2017~2020, OBCon Inc.

 * @author gye hyun james kim [pnuskgh@gmail.com]

 */

class Batch {
    constructor() {
    }

    //--- callback(code: int, message: string)
    //---     code                      : 코드 (0. 정상)
    //---     message                   : 메시지
    batchJob(options = {}, callback) {
        logger.info('include/batch.js :: batchJob');
        callback(0, 'ok');
    }

    //--- 모든 Promise를 차례대로 실행 한다.
    //---     정상인 경우, 다음의 then 함수를 호출 한다.
    //---     오류인 경우, 다음의 catch 함수를 호출 한다. 오류 이후의 promise는 실행되지 않는다.
    batchJob_stepBystep(options = {}, callback) {           //--- 차례대로 실행
        let myPromise = new Promise(function(resolve, reject) {
            try {
                setTimeout(function() {
                    logger.info('11111111111');
                    resolve({ code: 0, message: 'ok 1' });
                }, 3000);
            } catch (e) {
                utils.obj.loggerError(e);
                reject({ code: 1, message: 'error 1' });
            }
        });
        
        myPromise = myPromise.then(function(value) {
            return new Promise(function(resolve, reject) {
                try {
                    setTimeout(function() {
                        logger.info('22222222222');
                        logger.info(`code: ${value.code}, message: ${value.message}`);
                        resolve({ code: 0, message: 'ok 2' });
                    }, 2000);
                } catch (e) {
                    utils.obj.loggerError(e);
                    reject({ code: 1, message: 'error 2' });
                }    
            });
        });

        myPromise = myPromise.then(function(value) {
            return new Promise(function(resolve, reject) {
                try {
                    setTimeout(function() {
                        logger.info('333333');
                        logger.info(`code: ${value.code}, message: ${value.message}`);
                        resolve({ code: 0, message: 'ok 3' });
                    }, 1000);
                } catch (e) {
                    utils.obj.loggerError(e);
                    reject({ code: 1, message: 'error 3' });
                }    
            });
        });

        myPromise = myPromise.then(function(value) {
            logger.info(`code: ${value.code}, message: ${value.message}`);
            callback(value.code, value.message);
        });

        myPromise = myPromise.catch(function(err) {
            logger.info(`code: ${err.code}, message: ${err.message}`);
            callback(err.code, err.message);
        });
    }

    //--- 모든 Promise를 실행 한다.
    //---     정상인 경우, then 함수를 호출 한다. values에는 모든 promise의 결과를 배열로 반환 한다.
    //---     오류인 경우, 해당 오류의 반환값을 가지고 catch 함수를 호출 한다. 단, 이 경우에도 모든 Promise가 실행 된다.
    batchJob_all(options = {}, callback) {                  
        let promises = [];

        promises.push(new Promise(function(resolve, reject) {
            try {
                setTimeout(function() {
                    logger.info('11111111111');
                    resolve({ code: 0, message: 'ok 1' });
                }, 2000);
            } catch (e) {
                utils.obj.loggerError(e);
                reject({ code: 1, message: 'error 1' });
            }
        }));

        promises.push(new Promise(function(resolve, reject) {
            try {
                setTimeout(function() {
                    logger.info('2222222222');
                    reject({ code: 1, message: 'error 2' });
                    // resolve({ code: 0, message: 'ok 2' });
                }, 1000);
            } catch (e) {
                utils.obj.loggerError(e);
                reject({ code: 1, message: 'error 2' });
            }
        }));

        promises.push(new Promise(function(resolve, reject) {
            try {
                setTimeout(function() {
                    logger.info('33333333333');
                    resolve({ code: 0, message: 'ok 3' });
                }, 1000);
            } catch (e) {
                utils.obj.loggerError(e);
                reject({ code: 1, message: 'error 3' });
            }
        }));

        Promise.all(promises)
        .then(function(values) {                            //--- values : { code: 0, message: 'ok' }의 배열
            for (let idx = 0; idx < values.length; idx++) {
                let value = values[idx];

                logger.info(`code: ${value.code}, message: ${value.message}`);
            }
            callback(0, '데이터 정리 완료');
        })
        .catch(function(err) {
            logger.info(`code: ${err.code}, message: ${err.message}`);
            callback(err.code, err.message);
        });
    }
}

module.exports = Batch;