try/catch
을 Promise
으로 감싸는 것이 좋습니다. 아래 코드를 검토하고 있는데 Promise
안에 try/catch
블록이 있어야 할 필요성을 이해하지 못하는 것 같습니다. 또한 Promise
블록이 보이지 않는 곳에는 왜 catch
블록에서 볼 수 있듯이 Promise
해결 방법이 없습니다. 우수 사례 및 효율성 측면에서 이 Promise
안에있는 요점을이 코드의 일부분으로 이해해주십시오.코드가 작동하지만 약속 내에 try/catch 블록을 갖는 것이 가장 좋습니다.
중복 된 부분을 정리하는 것과 관련된 제안 사항에 대해서도 감사드립니다. 그것은 약속 [실행 프로그램 기능] 내부 try/catch 블록을 가지고 가장 좋은 방법은
getRoute(): any {
return async (request: any, reply: any) => {
const result = new Promise<string>(async (resolve, reject) => {
try {
let userIsValid = await this.validator.validate(request.payload, RegisterUserValidator);
if (userIsValid.error) {
resolve(responseHelper.getErrorResponse(ResponseErrorCode.joiValidatorError, userIsValid.error));
throw new ControlFlowNonError();
}
let results = await this.authUser.registerUser(request.payload);
resolve(responseHelper.getSuccessResponse(results, null));
}
catch (error) {
let message: ILogMessage = {
code: ResponseErrorCode.unknownError,
message: ResponseErrorCode.unknownError.toString(),
meta: error,
sourceFunction : 'ApiDataCreateCredentials: getRoute()'
};
this.logHelper.error(message);
resolve(error);
}
});
reply(result);
};
};
왜 당신'결의()'및'throw' 것? 그걸로 무엇을 하려니? 당신이 가지고있는 전체 코드 흐름은 매우 이상합니다. ('resolve() '를 여러 번 호출하여, 무언가를 기록 할 수있게하는 것입니다.) 그리고 나는 이것이 최선의 방법이라고 생각하지 않을 것입니다. – jfriend00
이것은 또한 [ ] (https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns). 기존 약속을 '새로운 약속()'으로 둘러 쌌습니다. 바깥 약속은 전혀 필요하지 않습니다. 이미 가지고있는 약속을 되돌릴 수 있습니다. 불행히도, 나는 당신을 위해 그것을 다시 쓸 수있는 TypeScript을 잘 모른다. – jfriend00
'resolve (error)'- 원합니까? – Bergi