2017-02-07 7 views
-1

私は私の社会的なポスト飼料用buildQuery機能を構築しようとしている:この約束の結果をどのように使用できますか?

const buildQuery = (criteria) => { 
    const { userId, interest } = criteria; 
    const query = {}; 

    if (interest !== 'everything') { 
    if (interest === 'myInterests') { 
     User.findById(userId).then(user => { 
     return query.categories = { 
     $in: user.interests 
     }; 
     }); 
    } else { 
     query.categories = { $eq: interest }; 
    } 
    } 
    return query; 
}; 

interestmyInterestsとして伝わってくるなら、私は、ユーザー(userId)に属するinterestsの配列を見つけに行きたいです。

各投稿のカテゴリは、query.categoriesです。

interestsアレイが戻ったら、query.categoriesを検索して、ユーザーがmyInterestsに興味のある投稿に絞り込む必要があります。

今、私のテストではこれが単に無視されていることが示されています。すべての投稿を戻しています。私はここで間違って何をしていますか?

はありがとう

+0

User.findByIdが非同期です。この関数は、User.findByIdクエリが実行される前に戻ります。 約束またはコールバックを試してください。 – davibq

+0

私はそれをthenステートメントに入れてもコンソールのログは 'user.interests'ですか? – bloppit

答えて

0

あなたの関数が更新クエリの別の約束を返す必要があることをあなたは結果を待つ必要がある、とのためになります。

function buildQuery({userId, interest}) { 
    if (interest === 'everything') 
    return Promise.resolve({}); 
    else 
    return (interest === 'myInterests' 
     ? User.findById(userId).then(user => ({$in: user.interests})) 
     : Promise.resolve({$eq: interest}) 
    ).then(categories => ({categories})); 
} 

その後、クエリを実行する前にこの約束を待つ:

buildQuery(criteria).then(runQuery).then(results => …) 
+0

、ありがとう – bloppit

関連する問題