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) {
|
if (handlers.length > 1) {
|
||||||
const length = handlers.length;
|
const length = handlers.length;
|
||||||
handler = function(req) {
|
handler = function(req) {
|
||||||
var next = function(i, req, res) {
|
return handlers.reduce((promise, handler) => {
|
||||||
if (i == length) {
|
return promise.then((result) => {
|
||||||
return res;
|
return handler(req);
|
||||||
}
|
});
|
||||||
let result = handlers[i](req);
|
}, Promise.resolve());
|
||||||
if (!result || typeof result.then !== "function") {
|
|
||||||
result = Promise.resolve(result);
|
|
||||||
}
|
|
||||||
return result.then((res) => (next(i+1, req, res)));
|
|
||||||
}
|
|
||||||
return next(0, req);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user