parse-platform - Parse 的 afterSave 处理程序中的“返回”有什么意义
问题描述
我对 return 关键字在 afterSave 处理程序中的用途感到困惑。据我所知,它不会将结果返回给客户端,如果是这样,那么它将结果返回到哪里?Cloud Code 文档中的图片在下面给出以供参考。
解决方案
在上面的代码示例中,我认为它来自文档,返回确保来自的任何错误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
“返回”的工作原理!
以下是一些注意事项:
- 如果您要执行一些“昂贵”或长时间的操作并且客户端不需要等待,那么请确保您不返回 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);
};
如果发布到“微服务”时出现错误,客户端永远不会知道,但它会记录到您的控制台。
- 适合让客户端等待的
afterSave
情况是,您需要确保相关操作在客户端取回保存的对象之前完成。例如,假设您需要将新用户添加到角色,并且该操作需要在将用户返回到客户端之前完成,否则会由于缺少权限而发生错误。在这种情况下,您需要先保存用户并为其提供一个 id,然后才能将她添加到角色中。因此,在这种情况下,您会将用户添加到角色中,afterSave
这是一个异步操作并返回结果承诺,以便在客户端获取返回的用户对象时设置并知道用户权限的状态。
希望这可以帮助!
推荐阅读
- rest - API 密钥是否真正识别多租户应用程序中的租户?
- swift - 尝试使用 swift 上传到 api 时,图像数据显示损坏或为零
- javascript - El-table-column 属性在数组中具有多个值
- go - vscode调试golang:无法附加到pid 27203:在偏移量0x3bc6d5处解码矮部分信息:下溢
- javascript - 用于渲染车把页面的 expressjs 中的 Res.render 不起作用
- python - Django 模型外键字段在测试期间的迁移中不可用
- reactjs - 反应最大更新深度超出错误
- java - 缓存图像按钮android
- javascript - 当搜索词在单词后包含 () 时,搜索不会得到结果
- javascript - 右中殿的另一里打开时如何关闭另一里?