[英]Parse Server javascript SDK Updating User Details
我正在尝试使用Javascript SDK从客户端Web应用程序更新Parse Server用户。
我知道使用Parse.User是不可能的,但是使用Parse.Object是可能的。 我正在按照更新对象的指导进行操作,但似乎无法理解该函数的第三行。
function () {
var updateTheUser = Parse.Object.extend("_User");
var query = new Parse.User.current();
query.get(Parse.User.current().id, {
success: function (update) {
// The object was retrieved successfully.
update.set("phone", "01234 567890");
update.set("Barred", false);
update.save(null, {
success: function (update) {
console.log("Updated!");
}
});
},
error: function (object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and message.
}
});
};
};
嵌套回调很容易出错,如您在代码中所见。 您认为处理未收回对象的回调实际上处理了失败的保存。
请尝试以下操作,然后查看控制台中显示的内容(注意:如果没有babel,可能无法在IE中使用):
const asPromise = (fn,context,args) => {
return new Promise(
(resolve,reject) => {
args.concat(
{
success:resolve,
error:(o,e) => reject([o,e])
}
);
fn.apply(context,args);
}
);
};
var updateTheUser = Parse.Object.extend("_User");
var query = new Parse.User.current();
//maybe query should be:
// var query = new Parse.Query(User);
// from documentation: http://docs.parseplatform.org/js/guide/#retrieving-objects
asPromise(query.get,query,[Parse.User.current().id])
.then(
update => {
update.set("phone", "01234 567890");
update.set("Barred", false);
return asPromise(
update.save,
update,
[null]
)
}
)
.then(
user => console.log("updated user:",user)
,error => console.warn("Something went wrong:",error)
);
只有这应该工作:
var user = Parse.User.current();
user.set("phone", "01234 567890");
user.set("Barred", false);
user.save(null, {
success: function (update) {
console.log("Updated!");
},
error: function (error) {
console.log(error);
}
});
我能够解决此问题的唯一方法是使用REST API进行AJAX请求
updateUser = function () {
var userId = Parse.User.current().id;
var data = JSON.stringify({
"username": username,
"firstname": firstname,
"lastname": lastname,
"email": email,
"phone": phone
});
$.ajax({
url: 'myServerURL' + userId,
type: 'PUT',
headers: {
'X-Parse-Application-Id': "my_api",
'X-Parse-Master-Key': "my_masterkey",
'Content-Type': "application/json"
},
"data": data,
success: function (result) {
// Do something with the result
alert("you have successfully updated your account. We're now going to need you to log back in with your new details?");
Parse.User.logOut();
window.location.href = "/#/login";
},
error: function (Response) {
alert(Response.error);
}
});
};
警告:因为它包含主密钥,所以它应该位于Parse Server上的Cloud Code中,而不是Web应用程序中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.