当从客户端查询时,由云功能更改的用户返回过时数据

时间:2016-09-09 03:46:32

标签: javascript parse-server

我让登录用户自行进行一些更改。这些更改发生在客户端代码调用的云函数中。云代码正确执行并返回,之后我查询用户表以获取更新的数据,但它返回旧数据并且缺少更新的字段。使用CDN的最新可用parse-latest.js。

我已经尝试在保存调用中发送用户会话令牌以及useMasterKey,但行为没有变化。

重现的步骤

  1. 调用云功能,更改当前登录用户的字段
  2. 云功能完成后返回客户端查询用户表以获取最新数据。
  3. 如果您检查此数据是陈旧数据且不包含最新数据。
  4. 以下是示例代码 这是对函数内部的云函数的调用。

    Parse.Cloud.run("notification_update", params))
        .then(function(obj) {
            dfd.resolve(obj);
        }, function onError(err) {
            console.error(err)
            dfd.reject(err);
    }
    

    云功能中的相关代码

    currentUser.set("team", team);
    console.log("Session token ");
    console.log(currentUser.getSessionToken());
    promises.push(currentUser.save(null, { sessionToken: currentUser.getSessionToken() }));
    

    云函数返回后,我调用此函数。我在解析数据库中检查数据是否已更新。

    var refresh = function onRefresh(dfd) {
          console.debug("Refresh user was triggered..");
         var currentUser = Parse.User.current();
         var q = new Parse.Query(Parse.User);
         q.include("team");
         q.get(currentUser.id)
            .then(function success(user) {
            currentUser.set({
                team: user.get("team"),           //Here the data is not updated
            });
            if (dfd && dfd.resolve) {
                dfd.resolve(currentUser);
            }
        }, function onError(error) {
            if (dfd && dfd.reject) {
                dfd.reject(error);
            }
        });
    }
    

    此外,当我在Chrome的“网络”标签中查看服务器的响应时,我发现用户已拥有所有更新的数据。

    Here you can the response has returned updated data and the team object is updated

    In this image you see while debugging the response you can see the team is undefined

1 个答案:

答案 0 :(得分:1)

为什么不对用户(我)进行查询,而不是运行完整的承诺查询来获取用户。

Parse.User.become(sessionToken).then(function(user){
    //User Object is available to you here
})