异步函数中的Promise reject()导致“Uncaught(in promise)”​​警告

时间:2017-12-17 12:26:21

标签: javascript typescript asynchronous

以下代码段会在调用reject(err)时导致"未捕获异常警告" ,尽管该方法是在try / catch语句中调用的。

async verifyToken (token: string): Promise<string | object> {
    return new Promise<string | object>( (resolve, reject) => {
        jwt.verify(token, this._publicKey, (err, decoded) => {
             if (err) {
                reject(err);
            } else {
                resolve(decoded);
         };
     });
}

这违反了我对promisses和async / await模式的理解,因为到目前为止,如果在try / catch语句中调用该函数,我不希望出现非处理错误。

try {
    const obj = await verifyToken(token);
} catch (err) {
    ...
}

目前我通过工作来解决这个问题。

async verifyToken (token: string): Promise<string | object> {
    let cause: any;
    const rv = await new Promise<string | object>( (resolve, reject) => {
        jwt.verify(token, this._publicKey, (err, decoded) => {
            if (err) {
                cause = err;
                resolve(undefined);
            } else {
                resolve(decoded);
            };
        })
    });
    if (rv) {
        return rv;
    } else if (cause instanceof Error) {
        throw cause;
    } else {
        throw new Error('invalid token');
    }
}

我的问题:

  • 为什么捕获不能解决这个问题?
  • 是否有更好的解决方案可以避免异步函数内的promisses中出现未处理的错误

1 个答案:

答案 0 :(得分:-1)

使用异步/等待:

//some async function
try {
    let response = await getAllPosts();
} catch(e) {`enter code here`
    console.log(e);
}

更多内容:"Uncaught (in promise) undefined" error when using with=location in Facebook Graph API query