【问题标题】:Having an issue where values are not being sent through socket.io correctly, using Node.js使用 Node.js 无法通过 socket.io 正确发送值的问题
【发布时间】:2019-08-04 12:58:56
【问题描述】:

我遇到了一个问题,我似乎无法在整个函数中保持值不变。就像我做这样的事情:

console.log(object.maxhp)
console.log(object)

它会显示 maxhp 属性值,但是第二个 console.log 甚至不会显示它。

这是它的主要功能:

const loadUp = async args => {
  let c, t, q;
  c = "User";
  t = "findById";
  q = [args.id];
  let user = await query(c, t, q);
  user.toObject();
  statHandler(user);
  addSnapShot(args.id, user);
  console.log(user.maxhp);
  console.log(user);
  c = "Area";
  t = "findOne";
  q = [{ name: user.location.area }];
  let ml = await query(c, t, q);
  Object.assign(user, { mobs: ml });
  c = "User";
  t = "updateOne";
  q = [{ _id: args.id }, { $set: { online: true } }];
  query(c, t, q);
  return await user;
};

这里是查询函数:

const q = async (c, t, q) => {
  c = require(`../models/${c}`);
  let query = c[t](q[0], q[1]);
  return await query.exec().then(res => {
    return res;
  });
};

module.exports = q;

(我在导入时将其作为 query())

所以基本上,stathandler 应该在用户对象中添加和修改大量信息并更新它。快照以某种方式具有正确的这些值(但我可以在 console.log(user) 时看到它们,但如果我指定它们 user.maxhp 则可以)。

但是,当我将它们发送给客户端时,它似乎丢失了这些值。在我使用新的查询功能之前,我已经完成了这项工作,但我不知道为什么它会损坏。

(我不会费心将 stathandler 函数发布为非常长,而且我知道它的一部分有效,因为我没有更改该特定函数中的任何内容)

我很确定这是我处理查询的方式,但我终其一生都无法弄清楚到底是什么搞砸了。

【问题讨论】:

    标签: node.js mongodb mongoose socket.io


    【解决方案1】:

    把我的查询功能改成这个; .lean() 是答案,其他编辑只是偏好。

    更新:更好的代码:jfriend00

    const q = async (c, t, q) => {
      c = require(`../models/${c}`);
      let query = c[t](q[0], q[1]);
      return query.lean().exec()
    };
    

    至于.lean() 调用会引起问题,我还不知道。但它似乎对我在很多情况下遇到的所有问题都有效。

    【讨论】:

    • 你为什么要.then(res => { return res; });?这是一个无操作 - 什么都不做。而且,你为什么要做return await results 而不是return results。那里的await 也什么都不做。
    • 当我删除 .then() 时,它完全没有返回任何内容。哦,那等待是无用的,哇哦哈哈
    • 而且,当您使用它时,您也可以直接使用return query().lean().exec(); 也不需要await
    • 嗯,当我最开始这样做时,所有这些都不起作用,但我想当我改变一切时,一切似乎都到位了,现在我可以那样做了,什么?哦,好吧。
    • 它也不再需要是async,因为没有使用await,也没有使用async函数的任何其他功能。
    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2018-08-12
    相关资源
    最近更新 更多