Continúa la ejecución incluso si la condición es verdadera y se devuelve res.json ().

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

A continuación se muestra el error impreso en la consola.

error: Error: no se puede escribir en la respuesta más de una vez

¿Necesito hacer algo más?

1
Sahil Deliwala 10 dic. 2015 a las 11:08

3 respuestas

La mejor respuesta

Como se publicó en Cómo romper / salir de cada uno ( ) en JQuery?, puede salir de each bucles devolviendo false . Así,

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

Si eso no funcionó y usó underscore.js, vea cómo para romper la función _.each en underscore.js que recomienda usar .every donde return false funciona (en lugar de .each). Así

_.every(rooms, function(room){
    if(room.users.length == users.length) {
        res.json(room);
        return false;
    }
});
0
Community 23 may. 2017 a las 12:30

Podría considerar el uso de una función diferente en el subrayado / lodash api, por ejemplo, find parece adaptarse mejor a lo que está haciendo mejor:

var room = _.find(rooms, function(room){
  return room.users.length == users.length;
});
res.json(room);
0
BrettJephson 10 dic. 2015 a las 10:04

Deberías romper el ciclo y luego res.status(200).json(room)

0
Tuan Anh Tran 10 dic. 2015 a las 08:10
34196649