Brown KL
Brown KL

Reputation: 2385

Promises then/catch

I have the following code:

return requestAsync({
     method: 'GET',
     url: 'https://' + servers[num - 1] + ':8033/version.txt'
}).then().catch()

I tried throwing an error in the then handler but that didn't work

If a condition is not met in the then handler, I want throw an error that the catch handler handles. How can I get that done?

Code:

var P = require('bluebird');
var defer = function () {
    var resolve, reject;
    var promise = new P(function () {
        resolve = arguments[0];
        reject = arguments[1];
    });
    return {
        resolve: function () {
            resolve.apply(null, arguments);
            return promise;
        },
        reject: function () {
            reject.apply(null, arguments);
            return promise;
        },
        promise: promise
    };
};

var pool = {maxSockets: Infinity};
var requestAsync = function (options) {
    options.pool = pool;
    options.timeout = 60000;
    options.rejectUnauthorized = false;
    options.strictSSL = false;
    var deferred = defer();
    var r = request(options, function (err, res, body) {
        if (err) {
            return deferred.reject(err);
        }
        deferred.resolve(res, body);
    });

    deferred.promise.req = r;

    return deferred.promise;
};

return requestAsync({
     method: 'GET',
     url: 'https://' + servers[num - 1] + ':8033/version.txt'
}).then(function (response) {
     throw new Error('Server is not taken');
}).catch(function (err) { });

Upvotes: 2

Views: 16532

Answers (2)

agconti
agconti

Reputation: 18093

You can manually throw the error:

requestAsync({
 method: 'GET',
 url: 'https://' + servers[num - 1] + ':8033/version.txt'
})
.then(function () { 
  throw new Error("Catch me")
}))
.catch(function (error) {
  console.error(error)
})

jsbin: https://jsbin.com/dewiqafaca/edit?html,js,console,output

Upvotes: 6

kungphu
kungphu

Reputation: 4849

Just use throw to generate a standard JavaScript exception in your then function and it should invoke the function in your catch block with whatever value you provide as the argument.

Upvotes: 0

Related Questions