2016-12-19 11 views
3

Я использую обещания заставить NodeJS прекратить работу, если определенные функции не выполняются по мере необходимости. На данный момент сервер останавливается по мере необходимости, но я также хотел бы включить консольный журнал, если функции успешно выполнили свои обещания. Я использую модуль qpm 'q'.Как вы исполняете, только если обещание было выполнено?

Рабочий код

Q.all([ 
    someFunction1(), 
    someOtherFunction('https://www.google.com', 'Google'), 
    someOtherFunction('https://www.facebook.com', 'Facebook'), 
]) 
    .catch(function (err){ 
     console.log(err); 
     process.exit(1); 
}) 

При добавлении затем в соответствии с ниже, затем выполняется до обетования было завершено, и поэтому console.log вызов выполняется независимо от того, выполняется или отклонено обещание.

Q.all([ 
    someFunction1(), 
    someOtherFunction('https://www.google.com', 'Google'), 
    someOtherFunction('https://www.facebook.com', 'Facebook'), 
]) 
    .then(console.log("No problem here")) 
    .catch(function (err){ 
     console.log(err); 
     process.exit(1); 
}) 
+1

Вы возвращающееся обещание от ваших функций? Если из функций, содержащихся в .all [], возвращается неопределенное значение, оно немедленно оценивается –

+0

У меня были обещания возвращены, но это полезный момент для запоминания - спасибо. – aaaidan

ответ

5

Вы звоните console.log на месте, поэтому он вызывается независимо от того, удастся ли обещание или терпит неудачу.

Передайте функцию .then, содержащую журнал как заявление, и это будет вызывать только успех Q.all(...):

.then(function() { 
    console.log("No problem here"); 
}) 

 Смежные вопросы

  • Нет связанных вопросов^_^