2015-12-10 3 views
1

Он продолжает выполнение, даже если условие истинно и возвращает res.json().Sailsjs - продолжить выполнение после возврата res.json();

_.each(rooms, function(room){ 
    if(room.users.length == users.length) { 
     return res.json(room); // <-- returns but still continuous execution 
    } 
}); 

Ниже приведена ошибка, напечатанная на консоли.

error: Error: Cannot write to response more than once

Нужно ли мне что-либо делать?

ответ

0

Как писал в How to break/exit from a each() function in JQuery?, вы можете each выход петли, возвращая false. Таким образом,

_.each(rooms, function(room){ 
    if(room.users.length == users.length) { 
     res.json(room); 
     return false; 
    } 
}); 

Если это не работает, и вы использовали underscore.js см how to break the _.each function in underscore.js, который рекомендует использовать .every где return false работы (вместо .each). Таким образом

_.every(rooms, function(room){ 
    if(room.users.length == users.length) { 
     res.json(room); 
     return false; 
    } 
}); 
+1

return false работал. – crazy1337

+0

@SahilDeliwala: спасибо за отзыв –

0

вы должны разорвать петлю, а затем res.status(200).json(room)

+0

Спасибо за быстрый ответ, но как его функция обратного вызова, разрыв там не работает. :( – crazy1337

0

Вы могли бы рассмотреть возможность использования другой функции в подчёркивании/lodash API, например, найти, казалось бы, чтобы удовлетворить то, что вы делаете лучше:

var room = _.find(rooms, function(room){ 
    return room.users.length == users.length; 
}); 
res.json(room); 
+0

Это потрясающе. :) Я изменил свой код. Это отлично работает. благодаря – crazy1337

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