javascript - try catch 中未定义的值

标签 javascript ecmascript-6 async-await

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

我在下面添加一个代码片段:

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

如果我在回调函数中使用 console.log(friendshipRequest) ,一切都会像魅力一样工作,我会得到我想要的 JSON 对象。但是,当我尝试使用 const request 时在 try catch 语句中 - 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 });
  }
};

最佳答案

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

只需使用 promise :

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

关于javascript - try catch 中未定义的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43836415/

相关文章:

typescript - 类型 'IterableIterator<number>'不是数组类型或字符串类型

javascript - 异步/等待在 reactjs 中不起作用(使用 npx create-react-app)

visual-studio - 在立即窗口Visual Studio中调用异步方法

javascript - 未被捕获的TypeError:AA不是函数(Youtube API)

javascript - 在提交按钮上重置表单

javascript - 使用 javascript 在新窗口中打开 gmail 撰写,并可选择关闭

reactjs - React、ES6 - getInitialState 是在普通 JavaScript 类上定义的

phantomjs - PhantomJS 对 ES6 的原生支持

c# - Task.Run 串行通信

javascript - 当我的手指已经在屏幕上时,如何在添加到 DOM 的元素上捕获 touchmove 事件?