Spaces:
Sleeping
Sleeping
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;
|