Better promise router

This commit is contained in:
Florent Vilmart
2016-03-01 17:11:23 -05:00
parent 0e58c8d867
commit 9601ca4fca
2 changed files with 31 additions and 11 deletions

View File

@@ -0,0 +1,26 @@
var PromiseRouter = require("../src/PromiseRouter").default;
describe("PromiseRouter", () => {
it("should properly handle rejects", (done) => {
var router = new PromiseRouter();
router.route("GET", "/dummy", (req)=> {
return Promise.reject({
error: "an error",
code: -1
})
}, (req) => {
fail("this should not be called");
});
router.routes[0].handler({}).then((result) => {
console.error(result);
fail("this should not be called");
done();
}, (error)=> {
expect(error.error).toEqual("an error");
expect(error.code).toEqual(-1);
done();
});
});
})

View File

@@ -49,17 +49,11 @@ export default class PromiseRouter {
if (handlers.length > 1) {
const length = handlers.length;
handler = function(req) {
var next = function(i, req, res) {
if (i == length) {
return res;
}
let result = handlers[i](req);
if (!result || typeof result.then !== "function") {
result = Promise.resolve(result);
}
return result.then((res) => (next(i+1, req, res)));
}
return next(0, req);
return handlers.reduce((promise, handler) => {
return promise.then((result) => {
return handler(req);
});
}, Promise.resolve());
}
}