【发布时间】:2018-07-06 13:54:00
【问题描述】:
我有这个代码:
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 中是否有任何等价物?或者在这种情况下有没有其他选择?谢谢。
【问题讨论】:
-
(async () => {var myData = await test();})();。也就是说,IIFE。仅供参考,C# 现在支持asyncMains :) -
我不完全明白你为什么需要 GetAwaiter 来等待任务完成 - 你可以对 Task 对象做同样的事情(比如 .Result 或 await)。
-
@Yevgeniy.Chernobrivets
.GetAwaiter().GetResult()比.Result更推荐,如果你不能await。 IIRC 它与异常传播有关。但是有了写async Task Main(string[] args)的能力,这些天就不需要太多了。 -
@Yevgeniy.Chernobrivets 不使用 GetAwaiter,您将需要更多缩进或创建一个新函数,这会使代码更难阅读并且看起来很混乱
标签: c# node.js async-await