如何在异步函数中使用assert? (打字稿)

时间:2016-03-02 07:00:39

标签: typescript async-await assert

我有一个像下面这样的块,这是一个使用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。

1 个答案:

答案 0 :(得分:1)

如果异步db.connection()或count()将拒绝其承诺,则可以跳过

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);  
    }
}