如何在异步函数中使用断言? (打字稿)
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);
}
}
我有一个像下面这样的块,它是一个使用 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.
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);
}
}