Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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 Try-catch()不捕获错误并将其抛出_Javascript_Typescript_Promise_Try Catch_Httprequest - Fatal编程技术网

Javascript Try-catch()不捕获错误并将其抛出

Javascript Try-catch()不捕获错误并将其抛出,javascript,typescript,promise,try-catch,httprequest,Javascript,Typescript,Promise,Try Catch,Httprequest,我在一个类中有一个方法,它应该只抛出错误日志消息,然后在另一个函数中有另一个方法,它将获取这些错误并对它们进行控制台(目前) 问题是,它只是在控制台中抛出错误,而不是在上层 以下是file1.ts中的方法: private sendToApp2(App2Url: string, logObject: object) { try { let uriOptions = { host: this.hostname, por

我在一个类中有一个方法,它应该只抛出错误日志消息,然后在另一个函数中有另一个方法,它将获取这些错误并对它们进行控制台(目前)

问题是,它只是在控制台中抛出错误,而不是在上层

以下是
file1.ts
中的方法:

private sendToApp2(App2Url: string, logObject: object) {
    try
    {
        let uriOptions = {
            host: this.hostname,
            port: this.port,
            path: '/App2',
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Api-version': '1'
            }
        };

       this.App2Call(uriOptions, JSON.stringify(logObject));
    }
    catch (err) {
        throw err;
    }
}

private App2Call(params: Object, data: string) {
    return new Promise((resolve, reject) => {
        try {
            let req = http.request(params, (response) => {
                response.on('data', (data) => {
                    resolve(data);
                });

            }).on('error', (err: Error) => {
                reject(new Error(err.message));
            });

            req.write(data);
            req.end();
        }
        catch (err) {
            reject(new Error(err.message));
        }
    });
}
在第二个文件中,我执行以下逻辑来捕获错误并对其进行控制台:

GetErrors() {
        try {
            // initialize the class object    

            let getErrors = new FirstClass();
            await getErrors.sendToApp2(this.App2Url, this.logObject);
        }
        catch (err) {
            console.log(err);
        }
    }

这看起来像是一个简单的例子,忘记了在
sendToApp2
的定义中使用
async
。由于它不是
async
,因此在
sendToApp2
过程中不会抛出错误,因为它在
App2Call
拒绝承诺之前返回

您使用的是
sendToApp2
您使用的是
wait
,这表明您希望它返回一个承诺,因此只需在定义中添加
async

private async sendToApp2(App2Url: string, logObject: object) {
//      ^^^^^
然后,
try
/
catch
可以将拒绝处理为错误



旁注:现在,在
sendToApp2
中的
try
/
catch
没有意义,因为它所做的只是
抛出err
从sendToApp2返回一个承诺,并在调用函数时处理错误

private sendToApp2(App2Url: string, logObject: object) {
        let uriOptions = {
            host: this.hostname,
            port: this.port,
            path: '/App2',
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Api-version': '1'
            }
        };

       return this.App2Call(uriOptions, JSON.stringify(logObject));
}
etErrors.sendToApp2(this.App2Url, this.logObject).then(
     function(){},
     function(err){ //error callback,or you can use catch();
       alert(err);
});

如果没有
等待
,拒绝承诺不会成为例外,您可以
抓住
。是的,谢谢!:)异步/等待正是我所需要的