多个方法的流星模式调用顺序回调

时间:2015-12-07 15:05:16

标签: javascript meteor methods

我在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');
}

});`

1 个答案:

答案 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语句中添加一些逻辑时,哪个会更好看。