gpt4 book ai didi

javascript - 从解析类传递现有对象,否则创建一个新对象

转载 作者:行者123 更新时间:2023-11-28 00:28:07 25 4
gpt4 key购买 nike

到目前为止,我有一个 beforeSave 函数,可以防止保存重复的电子邮件,如下所示。

Parse.Cloud.beforeSave("Email", function(request, response) {

var query = new Parse.Query("Email");


// Gets the email key value (string) before object is saved
query.equalTo("address", request.object.get("address"));

// Checks to see if an object for that email already exists
query.first({

success: function(object) {
if (object) {
response.error("Email already Exists");
} else {
response.success();
}
},
error: function(error) {
response.error("Could not determine if this email exists");
}
});
});

创建电子邮件的函数,但如果有人将电子邮件地址添加到我们之前保存的项目中,则会破坏该函数,并最终破坏该函数存在的 promise 链,至少在我看来是这样。

function createEmails(emails) {
var EmailsClass = Parse.Object.extend("Email");
var toSave = _.map(emails, function(emailAddress) {
var email = new EmailsClass();
email.set("address", emailAddress);
return email;
});

return Parse.Object.saveAll(toSave);
}

最佳答案

希望有人有比这更好的答案,但似乎避免在 beforeSave 上保存的唯一方法是响应错误,这会扰乱后续处理。

因此,如果从应用程序的 Angular 来看,尝试创建重复项不是一个错误,而只是一个不允许的条件,那么我认为您必须在 beforeSave 之前通过过滤输入来捕获它对于重复项。

批量创建时效果不太好,但会是这样的:

// answer a promise for an existing email object with address==email or a promise to save a new one
function fetchOrCreateEmail(emailAddress) {
var EmailsClass = Parse.Object.extend("Email");
var query = new Parse.Query(EmailsClass);
query.equalTo("address", emailAddress);
return query.first().then(function(object) {
if (!object) {
object = new EmailsClass();
object("address", emailAddress);
return object.save();
} else {
return Parse.Promise.as(object);
}
});
}

// create Email objects with a given array of addresses, creating
// objects only for unique addresses
function createEmails(emails) {
var toSave = _.map(emails, fetchOrCreateEmail);
return Parse.Promise.when(toSave);
}

使用这个fetchOrCreateEmail函数,您可以如图所示批量创建,或者像这样创建单个:

fetchOrCreateEmail(emailAddress);

如果您使用这些来创建电子邮件对象,您将不再需要(或不需要)该类的 beforeSave Hook 。我想知道是否有比这个更好的解决方案,但我认为这是目前可以做的最好的解决方案。

关于javascript - 从解析类传递现有对象,否则创建一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29283859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com