Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Sure, call sites of C will need to change, since C's signature changed. That's expected, since C doesn't even take a callback anymore. But callers of A,B,D,E etc don't need to change. A,B,D,E etc can still take a callback parameter and return C's result via the callback.

    MultiplyAndSquare = (a, b, cb) ->
        Multiply a, b, (err, product) ->
            Square product, (err, square) ->
                cb(null, square) #ignore errors for now.

    
    C = (a, b, cb) -> 
        MultiplyAndSquare(a, b, cb)
        
    
    ABDEXY = (a, b, cb) -> 
        #Calls C
        C(a, b, cb)
        
    
    callersOfABDEXY = (a, b) ->
        #Calls ABDEXY
        ABDEXY a, b, (err, result) ->
            Console.WriteLine(result)
        
    
    #Refactored C. Returns a promise instead.
    refactoredC = (a, b) -> 
        (Q.async -> 
            result = yield Q.nfcall(MultiplyAndSquare, a, b)
            return result)()
    
    #Refactored ABDEXY.
    refactoredABDEXY = (a, b, cb) -> 
        #Change needed here, since C now returns a promise
        refactoredC(a, b).then (result) ->
            cb(null, result)

    #No need to refactor callersOfABDEXY


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: