john doe
john doe

Reputation: 816

Promise not getting resolved while sending http request

I am calling func2(which should return promise) but promise is not getting resolved.Am I resolving promise wrongly or is there any other problem.Please let me know what is the problem in following code?

            function func1() {

                func2().then(function (data) {
                    console.log(data);
                })

            }

            var func2 = function () {
                var d = q.defer();
                var postRequest = {
                    host: "abc",
                    path: "/xyz",
                };

                var buffer = "";

                var req = http.request( postRequest, function( res ) {  
                   var buffer = "";
                   res.on( "data", function( data ) {
                     console.log("data\n");
                     buffer = buffer + data; 
                   });
                   res.on( "end", function( data ) { 
                        d.resolve(data);
                        return d.promise;
                   });
                });

                console.log('after req');
                req.write(body);
                req.end();
            };

Upvotes: 0

Views: 294

Answers (1)

Tobi
Tobi

Reputation: 31479

You need to return the promise at the very end of the function. Try

function func1() {

    func2().then(function (data) {
        console.log(data);
    }).catch(function (error) {
        // Handle any error from all above steps 
        console.log("Got error:" + error);
    })
    .done();

}

var func2 = function () {
    var d = q.defer();
    var postRequest = {
        host: "abc",
        path: "/xyz",
    };

    var buffer = "";

    var req = http.request( postRequest, function( res ) {  
       var buffer = "";
       res.on( "data", function( data ) {
         console.log("data\n");
         buffer = buffer + data; 
       });
       res.on( "end", function( data ) { 
            d.resolve(buffer);
       });
       res.on( "error", function( err ) { 
            d.reject(err);
       });
    });

    console.log('after req');
    req.write(body);
    req.end();

    return d.promise;

};

Upvotes: 3

Related Questions