首页 > 解决方案 > Parse 的 afterSave 处理程序中的“返回”有什么意义

问题描述

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

在此处输入图像描述

标签: parse-platformparse-cloud-codeback4app

解决方案


在上面的代码示例中,我认为它来自文档,返回确保来自的任何错误post.save()都会被catch.

afterSave钩子中,永远不会向客户端返回任何错误。将返回的对象不受afterSave.

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

如果你返回一个 Promise,在 Promise 解决之前连接不会关闭。在您引用的代码的情况下,不会返回承诺,因此连接将立即关闭,因为该afterSave函数将在解决 post.save() 承诺之前返回。

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

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

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

继续阅读以了解为什么这很重要以及其他关于afterSave“返回”的工作原理!

以下是一些注意事项:

  1. 如果您要执行一些“昂贵”或长时间的操作并且客户端不需要等待,那么请确保您不返回 promise 并且该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);
};

如果发布到“微服务”时出现错误,客户端永远不会知道,但它会记录到您的控制台。

  1. 适合让客户端等待的afterSave情况是,您需要确保相关操作在客户端取回保存的对象之前完成。例如,假设您需要将新用户添加到角色,并且该操作需要在将用户返回到客户端之前完成,否则会由于缺少权限而发生错误。在这种情况下,您需要先保存用户并为其提供一个 id,然后才能将她添加到角色中。因此,在这种情况下,您会将用户添加到角色中,afterSave这是一个异步操作并返回结果承诺,以便在客户端获取返回的用户对象时设置并知道用户权限的状态。

希望这可以帮助!


推荐阅读