2016-03-02 172 views
0

我有一个像下面的块,这是一个功能使用async 如果我在那里添加一个断言语句,它将停止在该行执行的代码,但不会引发错误。它只是静静地死去:(如何在异步函数中使用断言? (Typescript)

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. 

} 

是有一些原因,断言可能被吞没? 我有这样的问题之前,事件发射器内的错误,似乎异步函数立即返回是一些类型的事件发射器/ Promise

回答

1

如果异步db.connection()或count()会拒绝它们的promise,那么你可以跳过console.log()调用。/catch:

try 
{ 
    await db.collection("stories").remove({}); 
} 
catch(e) 
{ 
    //...  
} 

或使用catch错误的诺言:

await db.collection("stories").remove({}).catch((e) => {//...}); 

[编辑]

通用包装,将执行异步功能,并继续甚至拒绝可以是这个样子:

async function Do<T>(func:()=>Promise<T>) 
{ 
    try 
    { 
     await func(); 
    } 
    catch(e) 
    { 
     console.log(e); 
    } 
} 
+0

我不知道是否有一种将所有'await'函数推入的通用包装器的方法? – dcsan

+0

为什么不能?查看我的更新。 – Amid