첫 번째 인수로 오류 또는 오류에 대한 다른 콜백?


12

우리 (그리고 JS SO 대화방)는 @rlemon과 며칠 전에 오류 처리에 대한 그의 Little-XHR 라이브러리에 대해 이야기했습니다.

기본적으로 어떤 오류 처리 패턴을 사용해야하는지 결정하려고했습니다.

xhr.get({
    // Some parameters, and then
    success: function(data) {},
    failure: function(data) {}
})

또는:

xhr.get({
    // Some parameters, and then
    callback: function(err, data) {}
})

하나는 더 jQuery와 같고 다른 하나는 더 노드와 같습니다. 어떤 사람들은 첫 번째 패턴이 오류 처리에 대해 더 많이 생각한다고 말합니다. 다른 콜백 함수를 잊어 버릴 수 있기 때문에 반대의 생각이 들지만 인수는 항상 두 번째 패턴에 있습니다.

이 두 패턴에 대한 의견 / 장점 / 단점이 있습니까?


xhr.get({ ... }, function (err, data) {})최소한 패턴을
정확히

답변:


5

실제로 중요한 기능은 스타일 일관성이므로 동일한 스타일로 코드를 작성할 수 있으며 비동기 상황을 처리하는 방법에 대한 메타 프로그래밍 가정을 만들 수 있습니다.

나는 개인적으로 선호

(err, data)물건을 다루는 표준적인 방법이기 때문입니다. 기능 구성이 가능합니다.

예를 after.map들어이 패턴을 사용합니다. 따라서 코드는

after.map(["foo.js", "bar.js"], function (fileName, callback) {
    fs.readFile(fileName, function (err, file) {
        callback(err, file)
    })
}, function (err, files) {
    // handle files
})

단순화 할 수 있습니다

after.map(["foo.js", "bar.js", fs.readFile, function (err, files) {
    // handle files
})

다른 장점은 마지막 매개 변수로 콜백을 전달할 수 있다는 것입니다

asyncOperation(options, function (err, data) {
    // not nested inside an object literal
})

콜백 마지막 접근 방식은 훌륭한 API 친숙성 접근 방식입니다.

또 다른 장점은 error객체 리터럴에서 핸들러 를 설정 하거나 기본 오류 핸들러 로 설정하는 것을 잊어 버릴 수 있다는 것입니다.

사용 (err, data)하면 매번이 오류를 효율적으로 처리하는 방법에 대해 생각해야합니다.


2

일반적으로 명시 적이 항상 암시 적보다 낫다는 것을 기억하고 싶습니다 .

이것을 사용하면 일반적으로 명시 적 successfailure함수와 관련이 있습니다. 코드를 여는 순간 처리하는 것을 정확히 알고 있습니다. 성공은 성공적으로 완료 된 호출을 처리하고 오류는 문제가있는 호출을 처리합니다.

단일 방법을 사용하는 대안은 해당 코드를 수정할 때 읽는 데 시간이 더 걸립니다. 게다가, 당신은 아마 이런 식으로 끝날 것입니다;

xhr.get({
    callback: function(err, data) {
        if (err) {
            // handle that error somehow
        }
        else {
            // deal with success somehow
        }
    }
})

그리고 이런 종류의 상용구는 지루하고 빠릅니다.

말할 것도없이,이 상용구를 추가하는 것을 잊어 버리고 예를 들어 성공을 처리하는 중이라면 코드베이스에 들어가는 새로운 개발자가 문제를 보지 못할 수 있습니다. 그러나 명시적인 오류 / 성공적인 콜백이 있으면 error콜백 이 누락되어 콜백을 처리하는 방법에 대해 작업을 시작하거나 최소한 "글쎄, 성공을 처리하는 것입니다. 오류를 처리하는 방법을 찾으십시오. " 코드가 덜 마술처럼 보입니다.


오류 콜백 누락을 확인하기 어렵고 첫 번째 err매개 변수를 처리하지 않는 것을 쉽게 확인할 수 있습니다.
Raynos

2

별도의 콜백

경우 xhr.get()호출이 성공하고 err중복입니다. 전화가 실패하는 경우. data중복됩니다. 클라이언트 코드가 하나 이상의 상태를 확인하도록 강요하는 대신 둘 다 전달하지 마십시오.

성공이 부분적 성공을 나타낼 수 있다고 밝혀지면 별도로 표시하십시오. 실패는 일반적으로 구제 옵션입니다.

나는 성공 사례 만 처리하는 개발자들과 함께 일했으며 많은 시나리오에서 성공 콜백을 구현하면 충분합니다. 다중 상태 콜백은 성공을 가정 할 때 해당 스타일의 프로그래밍에 치명적인 옵션입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.