나는 개념 문제와 관련된 비동기이 기다리고 코드 : 이것은 내가 내 코드에있는 코드 조각입니다 :재귀 적 약속 거부를 처리하는 방법은 무엇입니까?
라인은는 file.save()을 기다리고
async function uploadFileBackup(fileId, versionNumber, filePath, sync) { //...some irrelevant code const toReturn = new Promise((accept, reject) => { s3.upload(params, async function (err, data) { if (err) { reject(err) } else { //here is the relevant code file.backupStatus = 'success' await file.save() accept(data) } }) }) if (sync) return toReturn //...some other irrelevant code }
이제 경우
(그 약속 성공에 일어나는), 그럼 내 애플은 던져 처리 실패 약속을 거절 그리고 이것은 정확히 내 문제입니다.
또한 수락 메서드를 허용하면 약속의 처리되지 않은 거부가 발생합니다.
나는 자연스럽게 시도 캐치 블록과 else 문에서 코드를 둘러싸고 수 있지만, 그 오류가 약속 코드 S3에서 오는 생각하기 때문에 그 도움이되지 않습니다, 더, 그것은 개발자를 오도 할 것이다. 그 부분이 성공한 반면,을 업로드하고 받아 들일 코드는 실패 하나가 될 것입니다 : 확실히 다른 결과가 있습니다
- S3 업로드 실패 파일이
- 하지만 파일을 업로드하지 않았 음을 의미합니다. save() 실패는 db의 파일 상태가 업데이트되지 않았 음을 의미하지만 물리적 파일이 s3 시스템에 있습니다.
두 가지 오류는 동일한 try catch 블록에서 처리 할 수 없지만 accept 메소드에서 발생하는 상황을 포착하는 것도 (장면 뒤에서 일어난 일에 대해) 분명하지 않습니다. 마지막으로, 콜백 약속 교량의 try catch 블록을 추가하는 코드 가독성
을 complexifies 그래서 가장 좋은 방법은이 경우에 어떤
"전달 된 accept 메서드가 예외를 throw하는 경우 *"- 절대 해당하지 않습니다. – Bergi