我有一个像下面这样的块,这是一个使用async
的函数
如果我在那里添加一个assert语句,它将停止在该行执行的代码,但不会抛出任何错误。它只是默默地死去:(
async function testMongo() {
let db = await dbConnect();
await db.collection("stories").remove({});
let c = await count("stories", {} );
assert.strictEqual(c, 999); // should fail
console.log("moving on..."); /// will never get reached.
}
是否有某种原因可能导致断言被吞噬? 在事件发射器内部出现错误之前,我遇到过类似的问题,而async函数的立即返回似乎是某种类型的事件发射器/ Promise。
答案 0 :(得分:1)
console.log()调用。在这种情况下,您应该尝试在try / catch中包装这些调用:
try
{
await db.collection("stories").remove({});
}
catch(e)
{
//...
}
使用promise承担错误:
await db.collection("stories").remove({}).catch((e) => {//...});
[编辑]
将执行异步功能并在拒绝时继续执行的通用包装器可能如下所示:
async function Do<T>(func: ()=>Promise<T>)
{
try
{
await func();
}
catch(e)
{
console.log(e);
}
}