Better promise router
This commit is contained in:
26
spec/PromiseRouter.spec.js
Normal file
26
spec/PromiseRouter.spec.js
Normal 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();
|
||||
});
|
||||
});
|
||||
})
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user