Sailsjs - 返回res.json()后继续执行;

时间:2015-12-10 08:08:18

标签: javascript node.js sails.js

即使条件为真,它也会继续执行并返回res.json()。

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

以下是控制台中打印的错误。

  

错误:错误:无法多次写入响应

我还需要做其他事吗?

3 个答案:

答案 0 :(得分:0)

你应该打破循环然后require.undef

答案 1 :(得分: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;
    }
});

答案 2 :(得分:0)

您可以考虑在下划线/ lodash api中使用不同的函数,例如,find似乎适合您正在做的更好:

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