Parse 中的 afterSave 处理程序中的 "return" 有什么意义

What is the point of "return" in afterSave handler in Parse

我对 return 关键字在 afterSave 处理程序中的用途感到困惑。据我所知,它不会 return 将结果发送给客户端,如果是这样,那么它 return 将结果发送到哪里? Cloud Code 文档中的图片如下供参考。

在上面的代码示例中,我认为它来自文档,return 确保来自 post.save() 的任何错误将由 catch 得到 'caught'。

afterSave 挂钩中,不会 return 向客户端发送任何错误。将被 returned 的对象不受 afterSave.

中发生的任何事情的影响

afterSave中的return影响的是何时关闭与客户端的连接。

如果您 return 承诺,在承诺解决之前,连接 不会 关闭。对于您引用的代码,promise 不是 returned,因此连接将立即关闭,因为 afterSave 函数将在 post.save() promise 之前 return已解决。

为了使您突出显示的 return 对客户产生任何影响,您还必须 return 像这样的查询:

Parse.Cloud.afterSave('Comment', (request) => {
    const query = new Parse.Query('Post');
    return query.get(....)

在这种情况下,客户端将等待 post 的评论计数增加并在连接关闭之前保存。

继续阅读以了解为什么这很重要以及关于 afterSave 的其他要点以及 'returning' 的工作原理!

这里有一些注意事项:

  1. 如果您要执行一些 'expensive' 或长时间操作并且客户端不需要等待,请确保您没有 return 承诺并且 afterSave函数不是 async。如果您想更新外部系统或发送电子邮件作为保存的结果,这将是合适的。这是一个如何断开连接的示例...
const afterSave = function afterSave(request) {
  const { object } = request;
  got.post('htttps://my.microservice/complete', { object })
    .then(() => console.log('done posting to microservice'))
    .catch(console.error);
};

如果 post 到 'microservice' 时出现错误,客户端永远不会知道,但会记录到您的控制台。

  1. 让客户端等待 afterSave 的情况是您需要确保相关操作在客户端取回保存的对象之前完成的情况。例如,假设您需要向角色添加一个新用户,并且该操作需要在 return 将该用户发送到客户端之前完成,否则将由于缺少权限而发生错误。在这种情况下,您需要先保存用户,给它一个 ID,然后才能将她添加到角色中。因此,在这种情况下,您可以将用户添加到 afterSave 中的角色,这是一个异步操作和 return 结果承诺,以便在客户端获取 returned 用户对象。

希望对您有所帮助!