티스토리 뷰

Daylogs/Javascript

`deprecate` 구현하기

ohgyun 2013. 12. 15. 16:26


발생일: 2013.11.20

문제:
프라미스 패턴 구현체 중 하나인 `Q` 라이브러리(https://github.com/kriskowal/q) 코드를 보다보니,
`deprecated` 된 API를 구현하는 좋은 아이디어가 있어 메모해둔다.


해결책:

Q 라이브러리는 어떤 API가 deprecated 되었을 때 아래와 같이 구현하고 있다.

promise.valueOf = deprecate(function () {
    if (messages) {
        return promise;
    }
    var nearerValue = nearer(resolvedPromise);
    if (isPromise(nearerValue)) {
        resolvedPromise = nearerValue; // shorten chain
    }
    return nearerValue;
}, "valueOf", "inspect");


`promise.valueOf()`를 호출하면,
'valueOf는 deprecate 되었으니 inspect를 사용하라'는 콘솔 워닝이 뜬다.

원본 메서드는 그대로 두고, `deprecate()`로 묶어 새 API에 대한 가이드를 주는 아이디어가 좋다.
`deprecate()` 함수는 아래와 같이 생겼다.

function deprecate(callback, name, alternative) {
    return function () {
        if (typeof console !== "undefined" &&
            typeof console.warn === "function") {
            console.warn(name + " is deprecated, use " + alternative +
                         " instead.", new Error("").stack);
        }
        return callback.apply(callback, arguments);
    };
}



반응형
댓글
공지사항