Promise reject Possibly unhandled Error:

catch-block, hapi.js, javascript, node.js, promise

Solution

`.catch` takes a function as parameter however, you are passing it something else. When you don't pass a function to catch, it will silently just fail to do anything. Stupid but that's what ES6 promises do.

Because the `.catch` is not doing anything, the rejection becomes unhandled and is reported to you.

Fix is to pass a function to `.catch`:

handlers.getArray = function (request, reply) {
    myArrayFunction().then(function (a) {
        reply(a);
    }).catch(function(e) {
        reply(hapi.error.notFound('No array')));
    });
};

Because you are using a catch all, the error isn't necessarily a No array error. I suggest you do this instead:

function myArrayFunction() {
    // new Promise anti-pattern here but the answer is too long already...
    return new Promise(function (resolve, reject) {
            var a = new Array();
            //some operation with a
            if (a.length > 0) {
                resolve(a);
            } else {
                reject(hapi.error.notFound('No array'));
            }
        };
    }
}

function NotFoundError(e) {
    return e.statusCode === 404;
}

handlers.getArray = function (request, reply) {
    myArrayFunction().then(function (a) {
        reply(a);
    }).catch(NotFoundError, function(e) {
        reply(e);
    });
};

Which can be further shortened to:

handlers.getArray = function (request, reply) {
    myArrayFunction().then(reply).catch(NotFoundError, reply);
};

Also note the difference between:

// Calls the method catch, with the function reply as an argument
.catch(reply)

And

// Calls the function reply, then passes the result of calling reply
// to the method .catch, NOT what you wanted.
.catch(reply(...))

Problem

I have a function that does some operation using an array. I would like to reject it when the array is empty. As an example ``` myArrayFunction(){ return new Promise(function (resolve, reject) { var a = new Array(); //some operation with a if(a.length > 0){ resolve(a); }else{ reject('Not found'); } }; } ``` When the reject operation happens I get the following error. Possibly unhandled Error: Not found However I have the following catch when the call to myArrayFunction() is made. ``` handlers.getArray = function (request, reply) { myArrayFunction().then( function (a) { reply(a); }).catch(reply(hapi.error.notFound('No array'))); }; ``` What would be the correct way to reject the promise, catch the rejection and respond to the client? Thank you.

Original source