解析云代码保存不执行。

时间:2017-04-30 22:16:36

标签: javascript json parse-platform

我正在为我的IOS应用程序开发一段云代码(Parse),并注意到每当我尝试保存更新的对象时它都无法运行。如果我删除了保存功能,代码将工作并打印出成功响应,但如果我保留它,我会收到错误:

Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

我已经尝试了一堆解决方案,无论它们是什么,如果保存功能在代码中,上面的错误消息仍会从X-Code调试器打印出来。 (如果没有,则打印成功响应)

这是代码:

Parse.Cloud.define("removeFriend", function(request, response) {
Parse.Cloud.useMasterKey();
var userObjId = request.params.userObjId;
var currentUser = request.params.currentUser;
var query = new Parse.Query(Parse.User);
query.equalTo("objectId", userObjId);
//query.include('Friends');
query.find({
    success: function(results){
        var friendsArray = (results[0].get("Friends"));
        var newFriends = friendsArray.filter(function(x) {return x != currentUser});

        results[0].set("Friends", newFriends);
        results[0].save();
        response.success("THIS IS RESULT" + results[0].get("Friends"));



    },
    error: function(){
        response.error("The user was not successfully removed.");   

    }   
});

});

(我之前使用相同的错误创建了一个类似的问题,但从那时起重做了代码,所以我不想把这两个问题混在一起。)

1 个答案:

答案 0 :(得分:1)

保存是异步的,这意味着它们发生在一个单独的线程中。您在调用response.success()后立即返回save(),因此保存在函数终止之前永远不会完成。

您有两种选择:向save()调用添加成功/错误选项,或使用promises。我更喜欢后者,当你掌握它们时,它可以实现更清晰的代码。

results[0].save().then(
    function( success ) {
        response.success("THIS IS RESULT" + results[0].get("Friends"));
    },
    function( error ) { 
        response.error("There was an error trying to save the object: " + JSON.stringify(error)); 
    }
);