gpt4 book ai didi

javascript - 异步函数中的 Promisereject() 导致 “Uncaught (in promise)” 警告

转载 作者:行者123 更新时间:2023-11-28 10:43:34 26 4
gpt4 key购买 nike

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

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

这违反了我对 Promise 和 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');
}
}

我的问题:

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

最佳答案

我知道这已经过时了,很抱歉,我刚才在寻找其他东西时偶然发现了这个,但我想我已经找到了这个特定问题的答案。

Promise都不会resolve也不reject在 Actor 阵容中jwt.verify() throws它自己的错误。猜测该库是 jsonwebtoken或类似的东西,我怀疑您传递了无效的 token ,并且该方法执行 throw new Error('Invalid token')

我进一步认为,如果您要返回new Promise,那么您正在混合一些想法。您可能不应该使用 async关键字。

建议,

function verifyToken(token: string): Promise<ABetterType> {
return new Promise((resolve, reject) => {
try {
jwt.verify(token, this._publicKey, (err, decoded) => {
if (err) {
reject(err)
return;
}
resolve(decoded)
}
} catch (err) {
reject(err)
}
});
}

或者(我想我会尝试的)

function verifyToken(token: string): Promise<ABetterType> {
return new Promise((resolve, reject) => {
try {
const decoded = jwt.verify(token, this._publicKey);
resolve(decoded);
} catch (err) {
reject(err);
}
});
}

关于javascript - 异步函数中的 Promisereject() 导致 “Uncaught (in promise)” 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47855090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com