2015-12-24 7 views
-1

Интересно, как правильно обращаться с асинхронным вызовом в условии if. Например, я хочу исправить следующий код.Async call in if-condition

if(criterium2){ 
    function1(value, function(error, result){ 
    }) 
    } 
else { 
    function2(value, function(error, result){ 
    }) 
    } 

Каков наилучший способ обработки асинхронного вызова внутри if.

+1

Что именно вы пытаетесь «исправить»? Это похоже на простой старый аддон. Если вы хотите сделать код более удобочитаемым и поддерживаемым, используйте вместо него Promises. –

ответ

0

Использование обещаний. Если есть версия асинхронной этих функций, было бы

var promise; 

if(criterion) { 
    promise = function1Async(value); 
} 
else { 
    promise = function2Async(value); 
} 

promise.then(function(resolvedResult) { 
    // handle result 
}); 

Если это не версия асинхронной и они являются узловыми функциями стиля, вы можете promisify их с обещанием библиотекой вашего выбора.

var Promise = require('bluebird'), 
    promise, 
    function1Async = Promise.promisify(function1), 
    function2Async = Promise.promisify(function2); 

if(criterion) { 
    promise = function1Async(value); 
} 
else { 
    promise = function2Async(value); 
} 

promise.then(function(resolvedResult) { 
    // handle result 
});