Your { responseStatus: x }
object exists solely for the purpose of flow control, which can be provided naturally by the success path and error path of a promise returned by fn()
;
Also, with promises, there's no need to pass a callback to fn()
- indeed it is considered bad practice to do so.
So first,
- purge
callback
all through
- return a promise from each low level function
- simplify success chaining
- purge unnecessary error handlers
function fn() {
return fn1().then(call1);
}
function call1() {
return fn2().then(call2);
}
function call2() {
return fn3().then(lastfunction);
}
function fn1() {
//some code that returns a promise
}
function fn2() {
//some code that returns a promise
}
function fn3() {
//some code that returns a promise
}
Then, call as follows :
fn().then(function(response) {
// success callback (your "200" condition)
// show output;
}).catch(function(error) {
// error callback (your "500" condition)
// show error;
});
The response
var will be whatever lastfunction()
delivered. You have an issue if you want response
to be some aggregation of what is delivered by fn1()
, fn2()
, fn3()
that is not already delivered by lastfunction()
. That issue is comprehensively addressed here.
The error
var will be the first Error
to occur in the course of executing fn()
, with no loss of information; error.message
and error.status
(if it exists) can be read/displayed.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…