2014-12-28 2 views
0

У меня есть этот код:Результирует ли res.end() async.waterfall?

async.waterfall([ 
    function (callback){ 
     //some work 
    }, 
    function (callback){ 
     if(something) 
      res.status(200).send('Some message').end(); 
     else 
      callback(null); 
    }, 
    function (callback){ 
     //some work 
    } 
], function(err){ 
    //Do something here... 
}); 

Интересно, если я могу это сделать:

res.status(200).send('Some message').end(); 

Будет ASync концы или будет ждать вечно обратного вызова с использованием ресурсов из машины? Если да, то как это исправить, потому что у меня есть все, что у меня над кодом и как оно есть, мне очень ясно и что-то другое, я думаю, будет путать.

ответ

2

Будет ли асинхронный конец или он будет ждать навсегда для обратного вызова с использованием ресурсов с компьютера?

Да, в вашей средней функции работника вы не вызываете обратный вызов когда-либо, когда something истинно. В этом случае ответ будет отправлен, но waterfall никогда не будет завершен. Вы можете завершить водопад, вызвав обратный вызов с доброкачественной ошибкой, означающей только «короткое замыкание», или вы можете назвать это с успешным значением, что также означает короткое замыкание (возможно, более четкое).

async.waterfall([ 
    function (callback){ 
     //some work 
    }, 
    function (callback){ 
     if(something) 
      res.status(200).send('Some message').end(); 
      callback(null, true); //true means "short circuit" 
     else 
      callback(null); 
    }, 
    function (shortCircuit, callback){ 
    if (shortCirtcuit) { 
     callback(null, true); 
     return; 
     } 
     //some work 
    } 
], function(err){ 
    //Do something here... 
}); 

  • примечание стороны: res.send('Some message'); будет делать это. 200 - статус по умолчанию, а send - end.
Смежные вопросы