Handle Deferred
function _handleDeferred(deferred, result) {
if (!result || !result.then) {
// just to wrap objects which have no promises
deferred.resolve();
} else result.then(function (res) {
deferred.resolve(res);
}, function (err) {
deferred.reject(err);
}).catch(function (err) {
deferred.reject(err);
});
}