我在Meteor编码时一直遇到这种模式,我发现自己在彼此之间嵌套多个方法调用 - 第一个方法触发,然后在回调中,第二个触发,这取决于第一个结果,等等。在回调中没有嵌套方法调用的情况下,使用多个方法是否有更好的模式?代码很快变得混乱。
Meteor.call('unsetProduct', product._id, omitObj, function(err, result) {
if(!err) {
Meteor.call('editProduct', product._id, object, function(err, result) {
if(!err) {
//if no error, then continue to update the product template
Meteor.call('editProductTemplate', self._id, obj, function(err, result) {
if(!err) {
//call some other method
}
else {
FormMessages.throw(err.reason, 'danger');
}
});
}
else {
FormMessages.throw(err.reason, 'danger');
}
});//end edit product
}
else {
AppMessages.throw(err.reason, 'danger');
}
});`
答案 0 :(得分:0)
查看reactive-method包。我认为它完全符合您的需求:它将异步Meteor.call
包装到同步代码中。有了它,您的代码看起来会更清晰,比如
try {
const result = ReactiveMethod.call('unsetProduct', product._id, omitObj);
} catch (error) {
AppMessages.throw(err.reason, 'danger');
}
try {
const nestedResult = ReactiveMethod.call('editProduct', product._id, object);
} catch (error) {
FormMessages.throw(err.reason, 'danger');
}
try {
const evenMoreNestedResult = ReactiveMethod.call('editProductTemplate', self._id, obj);
} catch (error) {
FormMessages.throw(err.reason, 'danger');
}
在try
语句中添加一些逻辑时,哪个会更好看。