我如何使用此承诺的结果?

时间:2017-02-07 19:24:09

标签: javascript node.js mongodb express mongoose

我正在尝试为我的社交帖子提供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的形式出现,那么我想找到属于该用户的interests数组(userId)。

每个帖子都有一系列类别:query.categories

我收回interests数组后,我想查找query.categories,过滤到用户感兴趣的帖子myInterests

现在,我的测试表明这只是被忽略了。它带回了所有帖子。我在这里做错了什么?

谢谢

1 个答案:

答案 0 :(得分:0)

您需要等待结果,为此您的函数需要为更新的查询返回另一个承诺。

<form class="form">
<input id="newInput" type="text" placeholder="Dodaj pozycję">
<button id="createNew" type="button">Dodaj</button>
</form>
<h2>Moja lista:</h2>
<div class="listBg">
<ul id="list">
</ul>
</div>
<button id="deleteAll" type="button">Wyczyść</button>

然后在执行查询之前等待此承诺:

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}));
}