コンテキスト
私は2つのmongodbモデル、アカウントと会話を持っています。 各アカウントには、すべての会話のうち、whoと会話のIDが含まれています。モンゴースのネストされた非同期クエリコールバック
Facebookのメッセンジャーに似たページを作成しようとしています(左側の会話リスト、右側のチャット)。
問題
コードは、チャットの非同期内部Promise <Pending>
エラーでハングアップします。私は最高のコーダーではなく、私はそれが私に何を期待しているのか理解していません。それはネストされたクエリまたはそれのようなものを待つ必要があるように聞こえる?
コード
router.get('/chat/:id', function(req, res) {
if (req.user == undefined) {
return res.redirect('/');
}
else {
async.parallel({
conversations: function (err, users){
Account.find({'_id': {$ne: req.user._id}}).exec(err, users)
},
chat: function (err,talk){
Account.find({'_id': req.user._id, 'conversations.with': req.params.id}).exec(function(err, talk){
//if conversation ID doesn't exist, create.
if(!talk.length){
console.log(err + " No convo with ParamsId exists: " + req.params.id);
var newConvo = new Conversation({
owners : [req.user._id, req.params.id],
created_at : Date.now()
});
newConvo.save(function(err, convo){
//push conversation ID to both users
async.parallel({
modelAFind: function (A){
Account.findByIdAndUpdate(req.user._id, {$push: {'conversations': {'with':req.params.id, 'conversation': convo._id}}}, {safe:true, upsert: true, new : true}).exec(A)
},
modelBFind: function (B){
Account.findByIdAndUpdate(req.params.id, {$push: {'conversations': {'with':req.user._id, 'conversation': convo._id}}}, {safe:true, upsert: true, new : true}).exec(B)
}
}),
Conversation.findOne({'owners': {"$all":[req.user._id, req.params.id]}}).populate('owners messages.from').exec(talk);
});
}
else if (err){console.log(err)}
//else if conversation ID exists
else {
// CODE HANGS HERE!!
Conversation.findOne({'owners': {"$all":[req.user._id, req.params.id]}}).populate('owners messages.from').exec(talk);
}
});
},
},
function(err, result,next){
var ret = result.conversations;
console.log(result);
ret.dataB = result.chat;
res.render('chat', {
user: req.user,
users: ret,
profile : req.params.id,
title : req.params.id + 'とチャット',
conversationId: ret.dataB
});
});
}
});
どのように成功した)(Conversation.findOneからデータを得ることができますか?
ありがとうございました!
これは今たくさんきれいで、あなたの説明が明らかになったあなたに感謝します – y4my4m