Я хотел бы сделать запрос Ajax на мой сервер MongoDB и использовать данные вместе с другими асинхронными задачами, используя автономную функцию, чтобы я мог максимально модульно кодировать.Я не очень разбираюсь в асинхронном программировании, поэтому могу ошибиться.В моем коде я использовал другую функцию (doubleAfter2Seconds), возвращающую обещание, которая работает отлично.Переменная результата из await getMongoData ("mydb", url) выводится как неопределенная вместо фактических данных.
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://{MyServer}:27017/";
function getMongoData(dboArg, urlArg) {
var myPromise = () => {
return new Promise(resolve => {
MongoClient.connect(urlArg, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db(dboArg);
dbo.collection(myCollection).find({}).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
resolve(result[0]);
});
})
})
}
}
function doubleAfter2Seconds(x) {
return new Promise(resolve => {
console.log("v");
setTimeout(() => {
resolve(x * 2);
}, 1000);
});
}
async function addAsync(x) {
// This works
const a = await doubleAfter2Seconds(10);
console.log(a);
// This doesn't work
result = await getMongoData("mydb", url);
console.log(result);
return x;
}
addAsync(10).then((sum) => {
console.log(sum);
});