vishal_p
vishal_p

Reputation: 21

Deferred already resolved

Following is the node-js code used for HTTP requests. This code is giving "This deferred has already been resolved" error on production servers when I try to use requestPromise.resolve(str) in request end. Can someone please suggest what might be the error?

Libraries used : http and node-promise

var Promise = require('node-promise').Promise;
var requestPromise = new Promise();

callback = function (response) {
    var str = '';
    response.on('data', function (chunk) {
        str += chunk;
    });
    response.on('end', function () {
        if (!(response && response.statusCode >= 200 && response.statusCode < 300)) {

           requestPromise.resolve(str);

           return;
        }

        var resp;
        try {
            resp = JSON.parse(str);
        } catch (ex) {
            resp = str;
        }
        requestPromise.resolve(str);
    });
});

var request = http.request(options, callback);

request.on('error', function (err) {
    requestPromise.resolve(err);
});
request.write(postObject);
request.end();

Upvotes: 2

Views: 583

Answers (1)

hong4rc
hong4rc

Reputation: 4113

I think you cannot use new Promise() (because it need resolver).

You can use this code:

new Promise(function(resolve, reject) {
    callback = function (response) {
        var str = '';
        response.on('data', function (chunk) {
            str += chunk;
        });
        response.on('end', function () {
            if (!(response && response.statusCode >= 200 && response.statusCode < 300)) {

                resolve(str);
                return;
            }

            var resp;
            try {
                resp = JSON.parse(str);
            } catch (ex) {
                resp = str;
            }
            resolve(resp);
        });
    });

    var request = http.request(options, callback);

    request.on('error', function (err) {
        reject(err);
    });
    request.write(postObject);
    request.end();
});

Upvotes: 1

Related Questions