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

How to use assert within async functions? (Typescript)

我有一个像下面这样的块,它是一个使用 async 的函数 如果我在那里添加一个断言语句,它将停止在该行执行的代码,但不会抛出任何错误。它只是默默地死去:(

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.

}

断言可能被吞没是出于某种原因吗? 我以前遇到过类似的问题,事件发射器内部有错误,似乎异步函数的直接 return 是某种类型的事件 emitter/Promise.

如果 async 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);  
    }
}