【发布时间】:2019-01-16 03:09:24
【问题描述】:
一旦解决了我的代码并没有到达最后返回 Promise.resolve(returnValue) 并抛出空的 {} 对象,我已经尝试并捕获,任何帮助将不胜感激以解决以下问题。
main.ts
private async combineData(data: any, request: any): Promise < any > {
const details: any = [];
const indexIDs = this.indexIDs;
delete data.header.IndexOfRequestThatFailed;
const returnValue = {
"header": {
"statusDesc": "",
"statusCode": "",
"refID": ""
},
"details": details
}
as IGetPaymentHistoryResponse;
const paymentHistoryDetails = {
header: returnValue.header,
details: returnValue.details
};
// saving details to cache
const saveDetails = {}
as ICacheRequest;
saveDetails.cacheobject = paymentHistoryDetails;
saveDetails.cachetype = "CombinedPaymentHistoryCache";
saveDetails.key =
request.body.getPaymentHistoryRequest.header.serviceContext.tokenID;
const _passedParams: ILogParams = {}
as ILogParams;
_passedParams.refId =
request.body.getPaymentHistoryRequest.header.serviceContext.refID;
_passedParams.sessionId =
request.body.getPaymentHistoryRequest.header.serviceContext.tokenID;
_passedParams.opname = "getPaymentHistory";
_passedParams.starttime = moment().toString();
_passedParams.endtime = "";
try {
await CacheController.getInstance().saveDetailsWrapper(saveDetails,
_passedParams);
return Promise.resolve({
getPaymentHistoryResponse: paymentHistoryDetails
});
} catch (err) {
return Promise.reject({
getPaymentHistoryResponse: err
});
}
return Promise.resolve(returnValue);
}
【问题讨论】:
-
一个异步函数默认返回一个promise no?你真的需要用承诺包装你的回报吗?
-
是的,刚刚检查了一些示例,您应该简单地返回值或抛出错误。
-
是的,这是正确的异步返回承诺,但我尝试只返回对象但它不起作用我试图解决它,但我的问题是它没有达到返回语句
-
当然没有到达最后一行,你在 try 和 catch 子句中返回了一个承诺,所以它永远不会通过思考。 ps:你可以在使用异步时返回值本身,因为它会将你的响应包装成一个循环的承诺,除非它抛出一个错误,这将返回一个拒绝。
-
try/catch 是不同的操作,只是将数据保存到缓存它不应该阻塞其余代码
标签: javascript typescript asynchronous async-await