我经常看到这样的代码:
(代码完全由头开始)
something.someFunction('foobar')
.then(function(user) {
var email = user.email();
return user.getSomething();
})
.then(function(something) {
var metadata = something.metadata();
return user.getRelation(metadata);
})
.then(function(relation) {
return email.send(relation, metadata);
})
.catch(function(err) {
console.log(err);
})
;
这是常见做法吗?就个人而言,我认为它不是很干净也不可读。什么是替代品?我能想到的就是把所有需要的东西放到一个对象中然后传递它。但是,长期承诺可能会变得非常大:
something.someFunction('foobar')
.then(function(user) {
return {
email: user.email(),
something: user.getSomething(),
};
})
.then(function(state) {
return {
email: state.email,
metadata: something.metadata(),
relation: user.getRelation(metadata),
// 'something' is not needed anymore ...
};
})
.then(function(state) {
return {
result: email.send(state.relation, state.metadata),
// and everything else that might be needed later on ...
};
})
.catch(function(err) {
console.log(err);
})
;
这甚至还能按预期工作吗?如果没有,那么创建类似的东西会是什么?同样,我只是从头开始想出这个代码作为一个纯粹的示例。