【问题标题】:undefined value in try catch [duplicate]尝试捕获中的未定义值[重复]
【发布时间】:2017-05-08 05:01:58
【问题描述】:

我正在使用 try catch 语句。在我的 try 语句中,我只想返回从 t​​ry catch 语句之外定义的函数中获得的值。但是,这些值是未定义的。

我在下面添加一个代码sn-p:

const request = User.friendRequest(userId, friendId, (err, friendshipRequest) => {
  if (err) throw err;
  return friendshipRequest;
});

如果我在回调函数中使用 console.log(friendshipRequest),一切都像魅力一样,我得到了我想要的 JSON 对象。但是,当我尝试在 try catch 语句中使用 const request 时 - const request 变得未定义。

try {
  return res.status(201).json({
    error: false,
    request,
  });
} catch (e) {
  return res.status(400).json({ error: true, message: e.errsmg });
}

完整的代码如下所示

export const sendFriendRequest = async (req, res) => {
  const { userId, friendId } = req.params;

  const request = await User.friendRequest(userId, friendId, (err, friendshipRequest) => {
    if (err) throw err;
    return friendshipRequest;
  });

  try {
    return res.status(201).json({
      error: false,
      request,
    });
  } catch (e) {
    return res.status(400).json({ error: true, message: e.errsmg });
  }
};

【问题讨论】:

标签: javascript ecmascript-6 async-await


【解决方案1】:

我假设 User.friendRequest() 返回一个承诺,也可以使用回调,但你不应该同时使用两者(await 使用承诺,但你也在传递一个回调)。

只需使用承诺:

export const sendFriendRequest = async (req, res) => {
  const { userId, friendId } = req.params;

  try {
    const request = await User.friendRequest(userId, friendId);
    return res.status(201).json({
      error: false,
      request,
    });
  } catch (e) {
    return res.status(400).json({ error: true, message: e.errsmg });
  }
};

【讨论】:

    【解决方案2】:

    当我将代码更改为此并使用邮递员发布时 - 一切都按预期工作,但我仍然只想将值从函数传递给我的 try/catch。有什么建议吗?

    try {
        User.friendRequest(userId, friendId, (err, friendshipRequest) => res.status(201).json({
          error: false,
          friendshipRequest,
        }));
      } catch (e) {
        console.log(e);
        return res.status(400).json({ error: true, message: e.errsmg });
      }
    

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 2014-07-16
      • 1970-01-01
      • 2012-09-07
      • 2012-03-03
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多