【问题标题】:Parse.com / Javascript - Save users objectid string as user pointerParse.com / Javascript - 将用户 objectid 字符串保存为用户指针
【发布时间】:2014-12-30 03:50:21
【问题描述】:

当我拥有用户的对象 ID 时,如何保存指向对象的用户指针。

我可以将对象保存到 Parse 中的类,但受让人在 Parse 中始终是“未定义”。

例如我已经检索到用户对象,并且可以通过以下方式获取用户名/对象 ID 等:

function getUserFromUsername(username) {

Parse.initialize("...", "...");

console.log('The username passed in is: ' + username);

var User = Parse.Object.extend("_User");
var query = new Parse.Query(User);
query.equalTo("username", username);

query.first({
     success : function(result) {
        // Do something with the returned Parse.Object values
            var userPointer = new Parse.User();
            userPointer = result;
            console.log(userPointer.get('username')); // this returns the correct username
            return userPointer;

    },
    error : function(error) {
        alert("Error: " + error.code + " " + error.message);
    }
});
}

从下面的保存任务函数中调用:(注意,我已经记录了所有相关字段并且它们按预期返回。

function saveNewTask(clientName, taskTitle, taskDue, assigneeArray) {

Parse.initialize("...", "...");

var x;
for (x in assigneeArray) {

    var Task = Parse.Object.extend("Tasks");
    var task = new Task();

    task.set("title", taskTitle);
    task.set("date", taskDue);

    var thisAssignee = GetUserFromUsername(assigneeArray[x]);
    task.set('assignee', thisAssignee);

    task.save(null, {
        success : function(task) {
            // Execute any logic that should take place after the object is saved.
            console.log('New object created with objectId: ' + task.id);
        },
        error : function(gameScore, error) {
            // Execute any logic that should take place if the save fails.
            // error is a Parse.Error with an error code and message.
            console.log('Failed to create new object, with error code: ' + error.message);
        }
    });
}

}

【问题讨论】:

    标签: javascript parse-platform


    【解决方案1】:

    所以你应该保存一个指向用户任务的指针。

    var Task = Parse.Object.extend("Tasks");
    var task = new Task();
    
    task.set("user", user);
    task.set("title", "taskTitle");
    task.set("date", taskDue);
    
    task.save(null, {
        success : function(task) {
            // Execute any logic that should take place after the object is saved.
            console.log('New object created with objectId: ' + task.id);
        },
        error : function(gameScore, error) {
            // Execute any logic that should take place if the save fails.
            // error is a Parse.Error with an error code and message.
            console.log('Failed to create new object, with error code: ' + error.message);
        }
    });
    

    默认情况下,在获取对象时,不会获取相关的 Parse.Objects。这些对象的值在被获取之前无法检索,如下所示:

    var user = task.get("user");
    user.fetch({
      success: function(user) {
           //fetch user is here
      }
    });
    

    这里有解释:https://parse.com/docs/js_guide#objects-pointers

    您的脚本的问题是当您在 Parse 中查询时,它是异步完成的,因此您无法立即返回用户。相反,您需要返回承诺,然后在调用 getUserFromUsername 时处理它:

    function getUserFromUsername(username) {
        var User = Parse.Object.extend("_User");
        var query = new Parse.Query(User);
        query.equalTo("username", username);
        return query.first();
    }
    
    getUserFromUsername('testUsername').then(function(result) {
        //use User here
    }, function(error) {
        alert("Error: " + error.code + " " + error.message);
    });
    

    查看this document on promise chaining 了解有关承诺的更多信息:

    【讨论】:

    • 这让我可以将对象 ID 保存为字符串,但我希望将其保存为指针。或者......我应该只使用字符串吗?回复:承诺,我将不得不阅读更多内容。我不太明白为什么它现在不起作用 - 除了保存用户指针之外,这一切似乎都是。
    • objectId 是一个字符串。如果您查看 Parse 数据浏览器。
    • 对象 ID 很可能没有针对任务保存,因为由于 promise 问题,它没有从 getUserFromUsername 返回。
    • 感谢您帮助我完成这个 Wayne。我正在将我的应用程序的一部分从 PHP 转换为 Javascript,在 PHP 中我可以检索 Parse User 对象并将其保存为用户指针(例如,在 Parse 中,该字段的类型是指针 <_user>),但我只能这样做通过保存 Parse.User.current() 为当前登录的用户。一切都按预期返回,我可以从返回的对象中检索所有用户数据(例如用户名、对象 ID 等),但是当我保存它时就不会这样做。
    • 看过之后,可以使用指针了。我会更新我的答案:parse.com/docs/js_guide#objects-pointers
    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多