我在一个类中有一个方法,该方法应该只抛出错误日志消息,然后在另一个函数中有另一个方法,它将得到此错误并进行控制台处理(目前)。
问题在于它只是在控制台中而不是在上层引发错误...
这是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);
}
}
答案 0 :(得分:2)
看起来很简单,只是忘记在async
的定义上使用sendToApp2
。由于它不是async
,因此在sendToApp2
期间不会抛出任何错误,因为它在App2Call
被拒绝之前就返回了。
在使用sendToApp2
的地方使用await
,这表明您期望它返回承诺,因此只需在定义中添加async
:
private async sendToApp2(App2Url: string, logObject: object) {
// ^^^^^
然后try
/ catch
可以将拒绝作为错误处理。
旁注:目前,try
中的catch
/ sendToApp2
毫无意义,因为它所做的只是throw err
。
答案 1 :(得分:0)
从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);
});