Функция createDB
никогда не вернет "inside function"
, потому что строка возврата return "inside function";
возвращается для callback
функции function (err, db)
, а не createDB
.Другая сторона, MongoClient.connect
и return "outside function";
, будут выполняться в одно и то же время, тогда createDB
ничего не сделает, просто вернет строку "outside function"
.Ваша лямбда-функция занимает всего 50 мс: |.
Но почему MongoClient.connect
- это функция callback
, функция callback
будет вызываться, когда задача - MongoClient.connect выполнена, в вашем коде вам все равнооб этом, вы просто возвращаете "outside function"
string ???
Я вижу, вы используете ключевое слово await
, я хочу, чтобы вы подождали, пока соединение с БД уже было, затем выполните следующий оператор.Как вы знаете (возможно) await
действует только с Promise
(многие вещи можно объяснить в Интернете).
Как решить вашу проблему, MongoClient.connect
не даетЕсли у вас есть Promise
версия (я так думаю), то вы должны преобразовать ее в версию функции Promise, и я думаю, что вам нужно подождать, это экземпляр DB вместо строки.Наконец, я предлагаю следующее:
"use strict";
const MongoClient = require('mongodb').MongoClient;
function createDb() {
return new Promise((resolve, reject) => { // return createDb a promise
MongoClient.connect("mongodb://167.114.36.160:27017/testlambda2",
{ useNewUrlParser: true, useUnifiedTopology: true },
function (err, db) {
if (err) {
return reject(err);
};
console.log("Database created!");
resolve(db); // like return :)
});
})
}
module.exports.consumo_monofasico = async (event, context) => {
let result = {};
try {
var db = await createDb(); // now you can get a response what has been "pushed" in `resolve`
// TODO: Do some things with db instance
// success response
result = {
statusCode: 200,
body: JSON.stringify(
{
message: 'Test mongo!',
resultado: "Connected!"
},
null,
2
),
};
// close db connection
db.close();
} catch (err) { // err is a error what has been pushed in `reject` :|
// error response
result = {
statusCode: 500, // http error code
body: JSON.stringify(
{
message: 'Test mongo!',
resultado: err
},
null,
2
),
};
}
return result;
};