Я создал приложение Javascript Function в Azure. Функция вызывается событием в EventHub и записывает события в MongoDB. Когда я использую asyn c -await, регистрация не показывается с использованием context.log, но событие вставляется / обновляется в MongoDB. Когда я удаляю await, будет отображаться логирование и событие вставляется / обновляется в MongoDB. Я не понимаю этого. Мне нужно написать несколько журналов, чтобы я мог использовать Log Analytics для мониторинга функции.
const MONGODB = require('mongodb');
const URI = process.env.MONGODBCONNECT;
const DBNAME = process.env.DBNAME;
const COLLECTIONNAME = process.env.COLLECTIONNAME;
let client = null;
module.exports = async function (context, eventHubMessages) {
let hasClient = client != null;
if (client == null) {
MONGODB.MongoClient.connect(URI, { useNewUrlParser: true, useUnifiedTopology: true }, function (error, _client) {
if (error) {
context.log('Failed to connect');
}
client = _client;
eventHubMessages.forEach((message, index) => {
process(message);
});
});
} else {
eventHubMessages.forEach((message, index) => {
process(message);
});
}
async function process(message) {
try {
var payload = JSON.parse(message).payload;
var collection = client.db(DBNAME).collection(COLLECTIONNAME);
var update_timestamp_mongodb = new Date().toISOString();
var event_id = uuid();
if (payload.OPERATIE == 'DELETE') {
await collection.deleteOne({ "_id": payload.LZK_ID });
context.log('Deleted in DB: ' + DBNAME + ', collection: ' + COLLECTIONNAME + ', _ID: ' + payload.LZK_ID);
} else {
await collection.updateOne({ "_id": payload.LZK_ID }, {
$set: {
"LABORATORIUMONDERZOEK": JSON.parse(payload.LABORATORIUMONDERZOEK),
"UUID": event_id,
"MONGODB_TIMESTAMP": update_timestamp_mongodb
}
}, { upsert: true });
context.log('Stored in DB: ' + DBNAME + ', collection: ' + COLLECTIONNAME + ', _ID: ' + payload.LZK_ID + ', uuid: ' + event_id);
}
} catch (error) {
context.log.error('[GDDB-LAB-0500] Error: ', error.message, error.name, '\n\n Got message: ' + message);
};
};
};