Я решил использовать модуль Async для заполнения коллекции mongodb в том порядке, в котором я хочу.
Без Async код работает, но документы не вставляются в правильном порядке:
function insertRowInBLD(ref, riskstatements, maximpact, controleffectiveness, recommendedriskrating, frequency, impact, validatedreviewriskrating, rationalforriskadjustment) {
const businessLineDashboard = new BusinessLineDashboard({
ref: ref,
riskstatements: riskstatements,
maximpact: maximpact,
controleffectiveness: controleffectiveness,
recommendedriskrating: recommendedriskrating,
frequency: frequency,
impact: impact,
validatedreviewriskrating: validatedreviewriskrating,
rationalforriskadjustment: rationalforriskadjustment
});
businessLineDashboard.save()
.then(row => {
console.log('row ' + businessLineDashboard.ref + ' has been inserted succesfully');
})
.catch(err => {
console.log('err: ', err);
});
}
Я хотел, чтобы «документы» были вставлены в таком порядке. Из-за асинхронной природы JavaScript этого не произошло. Поэтому я попытался использовать
async.series:
function fillBLD() {
async.series([
function (callback) {
console.log("Task 1");
insertRowInBLD('R01', 'Disclosure of data due to deliberate action by internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 1 Inserted');
},
function (callback) {
console.log("Task 2");
insertRowInBLD('R02', 'Corruption of data due to deliberate action by internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 2 Inserted');
},
function (callback) {
console.log("Task 3");
insertRowInBLD('R03', 'Unavailability of data due to deliberate action by internal actor', 'E. Not significant', 'Partially effective', '', '', '', '', '')
callback(null, 'Row 3 Inserted');
},
function (callback) {
console.log("Task 4");
insertRowInBLD('R04', 'Disclosure of data due to attack of the communications link by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 4 Inserted');
},
function (callback) {
console.log("Task 5");
insertRowInBLD('R05', 'Corruption of data due to attack of the communications link by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 5 Inserted');
},
function (callback) {
console.log("Task 6");
insertRowInBLD('R06', 'Unavailability of data due to attack of the communications link by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 6 Inserted');
},
function (callback) {
console.log("Task 7");
insertRowInBLD('R07', 'Disclosure of data due to social engineering by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 7 Inserted');
},
function (callback) {
console.log("Task 8");
insertRowInBLD('R08', 'Corruption of data due to social engineering by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 8 Inserted');
},
function (callback) {
console.log("Task 9");
insertRowInBLD('R09', 'Unavailability of data due to social engineering by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 9 Inserted');
},
function (callback) {
console.log("Task 10");
insertRowInBLD('R10', 'Disclosure of data due to erroneous useby internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 10 Inserted');
},
function (callback) {
console.log("Task 11");
insertRowInBLD('R11', 'Corruption of data due to erroneous useby internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 11 Inserted');
},
function (callback) {
console.log("Task 12");
insertRowInBLD('R12', 'Unavailability of data due to erroneous useby internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 12 Inserted');
},
function (callback) {
console.log("Task 13");
insertRowInBLD('R13', 'Disclosure of data due to unauthorized access by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 13 Inserted');
},
function (callback) {
console.log("Task 14");
insertRowInBLD('R14', 'Corruption of data due to unauthorized access by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 14 Inserted');
},
function (callback) {
console.log("Task 15");
insertRowInBLD('R15', 'Unavailability of data due to unauthorized access by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 15 Inserted');
},
function (callback) {
console.log("Task 16");
insertRowInBLD('R16', 'Disclosure of data due to attack by malicious code by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 16 Inserted');
},
function (callback) {
console.log("Task 17");
insertRowInBLD('R17', 'Corruption of data due to attack by malicious code by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 17 Inserted');
},
function (callback) {
console.log("Task 18");
insertRowInBLD('R18', 'Unavailability of data due to erroneous useby internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 18 Inserted');
},
function (callback) {
console.log("Task 19");
insertRowInBLD('R19', 'Disclosure of data due to improper change/maintenance by internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 19 Inserted');
},
function (callback) {
console.log("Task 20");
insertRowInBLD('R20', 'Corruption of data due to improper change/maintenance by internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 20 Inserted');
},
function (callback) {
console.log("Task 21");
insertRowInBLD('R21', 'Unavailability of data due to improper change/maintenance by internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 21 Inserted');
},
function (callback) {
console.log("Task 22");
insertRowInBLD('R22', 'Disclosure of data due to loss or theft of device by internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 22 Inserted');
},
function (callback) {
console.log("Task 23");
insertRowInBLD('R23', 'Unavailability of data due to loss or theft of device by internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 23 Inserted');
},
function (callback) {
console.log("Task 24");
callback(null, 'Row 24 Inserted');
},
function (callback) {
console.log("Task 25");
insertRowInBLD('R25', 'Corruption of data due to bypassing physical security by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 25 Inserted');
},
function (callback) {
console.log("Task 26");
insertRowInBLD('R26', 'Unavailability of data due to bypassing physical security by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 26 Inserted');
},
function (callback) {
console.log("Task 27");
insertRowInBLD('R27', 'Disclosure of data due to third-party security breach by external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 27 Inserted');
},
function (callback) {
console.log("Task 28");
insertRowInBLD('R28', 'Corruption of data due to third-party security breach by external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 28 Inserted');
},
function (callback) {
console.log("Task 29");
insertRowInBLD('R29', 'Unavailability of data due to third-party security breach by external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 29 Inserted');
},
function (callback) {
console.log("Task 30");
insertRowInBLD('R30', 'Disclosure of data due to unmanaged legal, regulatory and contractual requirements by internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 30 Inserted');
},
function (callback) {
console.log("Task 31");
insertRowInBLD('R31', 'Corruption of data due to unmanaged legal, regulatory and contractual requirements by internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 31 Inserted');
},
function (callback) {
console.log("Task 32");
insertRowInBLD('R32', 'Unavailability of data due to unmanaged legal, regulatory and contractual requirements by internal actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 32 Inserted');
},
function (callback) {
console.log("Task 33");
callback(null, 'Row 33 Inserted');
},
function (callback) {
console.log("Task 33");
insertRowInBLD('R33', 'Unavailability of data due to component failure by internal/external factor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 33 Inserted');
},
function (callback) {
console.log("Task 34");
insertRowInBLD('R34', 'Unavailability of data due to exhaustion of resources by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 34 Inserted');
},
function (callback) {
console.log("Task 35");
insertRowInBLD('R35', 'Unavailability of data due to environmental & natural disasters by external factor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 35 Inserted');
},
function (callback) {
console.log("Task 36");
insertRowInBLD('R36', 'Lack of accountability due to tampering with audit trails by internal/external actor', 'E. Not significant', 'Partially effective', 'Low', '', '', '', '')
callback(null, 'Row 36 Inserted');
},
], function (error, results) {
console.log(results);
});
}
Однако, хотя журналы консоли выполняются синхронно и результаты передаются в функции обратного вызова:
Задача 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 Задача 33 Задача 34 Задача
35 Задание 36 [«Вставлена строка 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 вставлено »,« Строка 33
Вставлено »,« Строка 34 вставлено »,« Строка 35 вставлено »,« Строка 36
Вставлено ']
Функции insertRowInBLD по-прежнему не выполняются в указанном мной порядке:
строка R01 успешно вставлена
строка R02 была вставлена
строка R03 успешно вставлена
успешно вставлена строка R05 успешно вставлена строка R07
была успешно вставлена строка R08 была успешно вставлена строка
R09 успешно вставлена строка R06 была вставлена
строка R12 успешно вставлена строка R19 успешно вставлена
успешно вставлена строка R14 успешно вставлена строка R17
успешно вставлен ряд R22 успешно вставлен ряд
R28 был успешно вставлен
успешно вставлен ряд R25 успешно вставлен ряд R30
успешно вставлен ряд R35 успешно вставлен ряд R10 имеет
успешно вставлен ряд R15 успешно вставлен ряд
R20 был успешно вставлен
строка R31 успешно вставлена строка R36 успешно вставлена
успешно вставлена строка R11 успешно вставлена строка R16 имеет
была успешно вставлена строка R21 была успешно вставлена строка
R27 был успешно вставлен
успешно вставлен ряд R13 успешно вставлен ряд R18
успешно вставлена строка R23 успешно вставлена строка R29 имеет
успешно вставлена строка R34 успешно вставлена
Я действительно не понимаю, почему они все еще выполняются асинхронно.
Любая идея, что может быть причиной этого и как я могу это исправить?
Спасибо!