[英]Parse Server [Cloud Code]: Handle concurrent requests
假设我在解析服务器上有一些云代码:
Parse.Cloud.beforeSave("UserProfiles", function(request, response) {
const query = new Parse.Query("UserProfiles");
query.equalTo("user", request.user);
query.count({
success: function(count) {
if(count == 0)
response.success();
else
response.error("only one profile is allowed");
},
error: function(error) {
response.error(error.message);
}
});
});
除非并发发生,否则它工作正常。 如果两个或多个请求同时执行新类的创建,则此代码将不会检查指针字段用户下的配置文件是否已存在。
我的问题是如何在beforeSave触发器中正确处理并发请求?
您可以首先确保您的UserProfile集合在数据库中具有按用户索引。 您必须根据数据库提供者自己弄清楚该如何做。 这样可以加快查询速度。
否则,您在这里没有太多选择。 我想说最好的选择是将创建UserProfile对象的代码放在Parse.User的beforeSave触发器内,并放在检查.isNew()的块内,以便仅在创建新用户时创建它。 我能想到的任何其他解决方案都会有类似的并发问题。
如果要使用BeforeSave()
,可以在保存之前将UserProfiles
指针设置为用户对象,如下所示:
Parse.Cloud.beforeSave(Parse.User, function(request, respone){
// only apply to new users
if(request.object.isNew()){
var UserProfile = new Parse.Object.extend("UserProfiles");
var userProfile = new UserProfile();
return userProfile.save().then(function(savedUserProfile){
request.object.set("key", savedUserProfile);
return request.object.save();
});
}
});
您可以通过Cloud jobs
, beforeSave
或afterSave
回调来实现
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.