2016-07-18 6 views
3

私はノードとmongooseを使用している初心者の開発者で、どのような方法で質問を連鎖的に連鎖させるのがよいか疑問に思っています。私は以下のようにしている、それは動作していない。mongooseクエリを連鎖させる最良の方法

User.findByIdAndUpdate(req.params._id, user, { upsert: true }) 
.exec((err, updatedUser) => { 
    if (addedCollections) { 
    return User.findByIdAndUpdate(req.params._id, { $push: { _collections: { $each: addedCollections } } }, { upsert: true }).exec(); 
    } 
    return new Query; 
}) 
.exec(() => { 
    return User.findById(req.params._id).populate('_collections'); 
}) 
.exec((err, user) => { 
    res.json({ user }); 
}) 

複数のクエリをチェーン化するにはどうすればよいですか?あなたが受信を使用し、マングース-観測することができます

User.findByIdAndUpdate(req.params._id, user, { upsert: true }) 
    .then(updatedUser => { 
     if (addedCollections) { 
     return User.findByIdAndUpdate(req.params._id, { $push: { _collections: { $each: addedCollections } } }, { upsert: true }); 
     } 
    }) 
    .then(() => { 
     return User.findById(req.params._id).populate('_collections'); 
    }) 
    .then(user => { 
     res.json({ user }); 
    }) 
    .catch(err => { 
     res.status(500).json({ error : err }); 
    }); 

答えて

5

あなたが何をしようとしてにかなり似約束チェーンを使用することができます。 Rxでは、.flatMap()は.then()と同じです。

var Rx = require('rx'); 
var observables = require('mongoose-observables'); 

/* get public header data, list of collections and projects */ 

router.get("/header", function(req, res) { 
    let articleTitle = observables.finder.find(Articles, '{}', ['title'], null); 
    let collectionTitle = observables.finder.find(Collections, '{}', ['title'], null); 

    Rx.Observable.forkJoin([articleTitle, collectionTitle]) 
    .subscribe(
     (docs) => res.json(docs), 
     (err) => console.error(err) 
    ); 
}); 

https://www.npmjs.com/package/mongoose-observables

ではより多くの例
0

関連する問題