0

私はWebアプリにsocket.ioを使用しています。ユーザーにオブジェクトを返したいのですが、何らかの理由でこの奇妙なオブジェクトを返すか、検索機能のようにします。

Object {options: Object, _conditions: Object, _updateArg: Object, op: "find"}

グループを探している私のapp.jsファイルで:

  socket.emit "getgroup", $(".user").attr("data-name")

次に、ノードのserver.jsで

  socket.on('getgroup', function (userid) {
    return io.sockets.emit('group', GroupModel.find({user:userid}));
  });

この場合、期待どおりに動作し、すべてのタスクを返します。

  socket.on('getall', function (socket) {
    return io.sockets.emit('getall', TaskModel.find());
  });

グループ モデル オブジェクトが返されないのはなぜですか?

4

1 に答える 1

2

Query オブジェクトMODEL.find()であるの戻り値を送信しています。Mongoose クエリは非同期であるため、実際のクエリ結果ではなく、結果を取得できるオブジェクトを返します。

あなたの場合、メッセージを送り返す前に、クエリが返されるのを待つ必要があります。

socket.on('getgroup', function (userid) {
  GroupModel.find({user:userid}, function(err, results) {
    if (err)
      // handle error
    else
      io.sockets.emit('group', results);
  });
});

他のクエリ ( with ) が機能する理由がわかりません。TaskModel見た目からして機能しないためです (同じ理由で、Queryオブジェクトを返します。そのオブジェクトからの結果が必要な場合は、.execonを呼び出す必要があります)。最初に呼び出すか、上記の例のようにコールバック関数を渡します)。

于 2013-04-06T11:00:18.633 に答える