2017-11-05 5 views
0

솔직히 말해서, 나는이 일을 올바르게 수행하고 있는지 궁금합니다. 사용자 정의 오류 메시지가 필요한 경우 모든 비동기 함수를 & catch와 함께 래핑해야합니까?Async/Await를 사용한 사용자 정의 오류 처리

은 다음 코드에 대한 모든 입력은 매우 극명하게 될 것이다 :

async function read(dir) { 
    let paths, content; 

    // read directory of paths to an array 
    try { 
    paths = await fs.readdir(dir); 
    } catch(err) { 
    throw 'Failed to read directory ' + dir; 
    } 

    // loop through paths reading file contents 
    for(const file of paths) { 
    try { 
     content = await fs.readFile(file, 'utf-8'); 
    } catch(err) { 
     throw 'Failed to read contents of ' + file; 
    } 

    try { 

    // another async function that manipulates content 

    } catch(err) 
     throw 'Failed to do whatever'; 
    } 
    } 
    return content; 
} 

// a function down here that calls read and handles thrown errors. 
+2

각 단계마다 사용자 정의 오류 메시지가 필요하면 각 단계에서 기본 오류를 포착해야합니다. – robertklep

+0

'fs' 메소드가 정말로 약속을 되 돌리는가? – Bergi

+0

네, fs-extra (https://www.npmjs.com/package/fs-extra)를 사용하고 있습니다. –

답변

2

이것은 완벽한 예입니다 얼마나 많은 청소기 비동기/await를 코드를 만들 수 있습니다! 사용자 정의 오류 메시지가 필요하지 않으면 try/catch를 하나만 사용할 수 있습니다. 그러나 당신이하기 때문에, 당신이했던 것처럼 여러 번의 시도/캐치를 사용하는 것이 길입니다. for 루프를 기다리는 것이 가장 좋은 방법입니다!

+0

입력 해 주셔서 감사합니다! 내가 옳은 일을하고 있는지 확인하고 싶었다. 확실히 훨씬 청결한. –

+0

promise'.catch (err => ...) 구문을 사용하는 것보다 이것이 어떻게 깨끗한 지 알지 못합니다. 또는 당신은 그것을 무엇과 비교하고 있습니까? – Bergi

+0

@Bergi 오류 처리는 그리 깨끗하지 않지만 몇 가지 문자가 적습니다. 큰 차이점은 for 루프에서 기다리고 있으며, 루프에 대한 비동기는 항상 기다릴 때까지 큰 고통을주었습니다. –