This is an awesome great functional implementation that uses state machine!
Many other implementations use too much repeated if checks.
It would greater if Nancy can pass all the Promise A+ spec tests: https://github.com/promises-aplus/promises-tests
One place where Nancy breaks is when empty then are chained. e.g.
const a = new Nancy((resolve, reject) => {
setTimeout(() => {
resolve('123');
}, 1000);
})
.then()
.then((value) => {
console.log(value);
});