Ваш код будет выполняться checkCountOnServerC
и checkPaymentC
параллельно, независимо от статуса available
. Следовательно, они не эквивалентны.
Правильное преобразование будет зависеть от стиля, который вы хотите использовать: node.js стандартный стиль обратного вызова, Promises, successCallback / errorCallback et c. Предполагая, что вы хотите использовать node.js стандартный стиль обратного вызова:
function performOrderC(callback){
checkCountOnServerC(order.item, order.count, function(err, available){
if (! available ) {
showNotAvailableMessage(order));
callback(new Error('Not available'));
return;
}
checkPaymentC(order.item, order.count, function(err, placedOrder){
askUserConfirmationWithDialogC(placedOrder, function(){
callback(null, confirmOrder(placedOrder)); // this is how you "return" results
});
});
});
}
Node.js стандартный стиль обратного вызова использует первый аргумент обратных вызовов для передачи ошибок в стек. Но до node.js это не было универсально принято асинхронными функциями.
Если вышеприведенное выглядит немного плотным (иногда его называют callback-адом), вы всегда можете изменить его, чтобы не использовать анонимные функции:
function checkPaymentHandler (callback) {
return function (err, placedOrder){
askUserConfirmationWithDialogC(placedOrder, function(){
callback(null, confirmOrder(placedOrder)); // this is how you "return" results
});
});
}
function checkCountHandler (callback) {
return function (err, available) {
if (! available ) {
showNotAvailableMessage(order));
callback(new Error('Not available'));
return;
}
checkPaymentC(order.item, order.count, checkPaymentHandler(callback));
}
}
function performOrderC(callback){
checkCountOnServerC(order.item, order.count, checkCountHandler(callback));
}