を完了するための非同期タスクを待っている、ここに私のコードは次のとおりです。の客室と対応するチャネルを取得するとき、私は、ユーザーが多くの部屋を持つことができ、各部屋には、多くのチャンネルを持つことができるアプリケーションを作成していnodejs
getRooms: function (req, res) {
User.find({id: req.cookies.claver_id}).exec(function (err, result) {
if (err) {
return res.send(400);
}
rooms = result[0].rooms;
if (rooms.length === 1) {//No room defaults to ['']
return res.send(400);
}
var roomsObj = {};
var roomsArr = [];//we will place the roomsObj inside the roomsArr
var chansObj = {};
var chansArr = [];
async.each(rooms, function (roomId, cb){
roomsObj = {};
if (roomId !== '') {
Rooms.findOne({id: roomId}).exec(function (err, room){
roomName = room.name;
inviteLink = room.inviteLink;
roomsObj.name = roomName;
roomsObj.id = roomId;
roomsObj.inviteLink = inviteLink;
var channels = room.channels;
async.each(channels, function (channelId, cb) {
chansObj = {};
Channels.findOne({id: channelId}).exec(function (err, channel){
chansObj.name = channel.channelName;
chansObj.id = channelId;
chansObj.type = channel.channelType;
chansArr.push(chansObj);
cb();
});
},
function (err) {
});
});
}
cb();
}, function (err) {
roomsObj.channels = chansArr;
roomsArr.push(roomsObj);
sails.log(roomsArr);
});
});
}
それは、
[ { name: "Room Name",
roomId: "Room Id",
inviteLink: "Room Invite Link",
channels: [
{
name: "Channel Name",
id: "channel Id"
}
]
}
]
しかしasync.each(rooms, function (roomId, cb){ })
が完了するasync.each(channels, function (channelId, cb) {})
を待たないので、私は空の部屋のオブジェクトを持っているので、私は常に空の配列を取得し、次の構造を持つjavascriptオブジェクトを返すことが想定されます。どうすればこの問題を解決できますか?
達成したいことを明確にします。私はあなたが "部屋のすべての部屋を取得し、部屋に割り当てられたすべてのチャンネルを更新する"と思っています。 –
は約束のように聞こえる。 – sova
@zabawareはい、まさに私が達成したいことです。 –