我有这段代码:
async function test() {
var mongo = await MongoClient.connect(connectionString);
var db = await mongo.db(databaseName);
var audit = db.collection(collectionName);
var result = await audit.find({}).toArray();
return arrayData;
}
var myData = test();
但显然myData仍然是promise对象。在C#我知道有函数GetAwaiter
让它等待承诺完成,在NodeJS中有没有相同的东西?或者这种情况有其他选择吗?谢谢。
答案 0 :(得分:2)
都能跟得上!所有async
个函数都会返回promises,您需要await
来自另一个async
函数,或then
它们:
所以你可以:
(async () => {
var myData = await test();
})();
或
test().then(data => {
var myData = data;
});
换句话说,Node中没有办法将async
函数转换为sync
函数。它一直是 async ,顺便提一下,它也是C#中的推荐方法。
N.B。在承诺上使用await
时,异常抛出,因此您需要在try / catch块中包含await
语句。但是,在使用.then()
时,您还需要指定.catch()
方法来处理错误。