Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步函数中的承诺拒绝()导致“;未兑现(承诺)和#x201D;警告_Javascript_Typescript_Asynchronous - Fatal编程技术网

Javascript 异步函数中的承诺拒绝()导致“;未兑现(承诺)和#x201D;警告

Javascript 异步函数中的承诺拒绝()导致“;未兑现(承诺)和#x201D;警告,javascript,typescript,asynchronous,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, deco

以下代码段在调用
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);
         };
     });
}
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');
    }
}
异步验证令牌(令牌:字符串):承诺{ 让原因:任何; const rv=等待新承诺((解决、拒绝)=>{ jwt.verify(令牌,此._公钥,(错误,已解码)=>{ 如果(错误){ 原因=错误; 解决(未定义); }否则{ 解析(解码); }; }) }); 如果(rv){ 返回rv; }else if(导致instanceof错误){ 抛出原因; }否则{ 抛出新错误(“无效令牌”); } } 我的问题是:

  • 为什么渔获量不能解决这个问题
  • 有没有更好的解决方案来避免在异步函数内的约定中出现未经处理的错误
使用异步/等待:

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

使用异步/等待:

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

这里有更多信息:

您的
try
/
catch
代码是正确的,因此发生了其他事情。请用一个演示问题的示例更新您的问题,最好是使用堆栈片段(工具栏按钮)运行的问题。IIRC这只是一个IDE问题,调试器在处理拒绝时也会暂停,您实际上没有在节点中得到一个
unhandledRejection
事件,对吗?@Bergi,您是对的,我正在使用vscode,当启用了未捕获异常的自动断点时,IDE将停止在这一行。我正在使用Node.js v8.9.3和vscode 1.18.1。您的
try
/
catch
代码是正确的,因此发生了一些其他问题。请用一个演示问题的示例更新您的问题,最好是使用堆栈片段(工具栏按钮)运行的问题。IIRC这只是一个IDE问题,调试器在处理拒绝时也会暂停,您实际上没有在节点中得到一个
unhandledRejection
事件,对吗?@Bergi,您是对的,我正在使用vscode,当启用了未捕获异常的自动断点时,IDE将停止在这一行。我正在使用Node.js v8.9.3和vscode 1.18.1。