解析服务器云代码 destroyAll 失败并出现无用的错误

Tha*_*Guy 1 parse-cloud-code parse-server

我正在将一些以前工作的云代码更新到新的 Parse Server。我已经用传递 useMasterKey 的新方法更新了它。

当 resultStations 数组被填充时,查询部分似乎正在工作,但删除失败。

Parse.Cloud.afterDelete("Workout", function(request) {

query = new Parse.Query("WorkoutStation");

query.equalTo("workout", request.object);

query.find({

    success: function(resultingStations) {

        console.log('Found these to delete:' + resultingStations);

        Parse.Object.destroyAll(resultingStations, {
            success: function() {
                console.log('Did successfully delete');
            },
        error: function(error) {
            console.error("Error deleting related workout stations " + error.code + ": " + error.message);
        }
        }, { useMasterKey: true });

    },

    error: function(error) {
        console.error("Error finding related workout stations " + error.code + ": " + error.message);
    }

}, { useMasterKey: true });
});
Run Code Online (Sandbox Code Playgroud)

如果我查看仪表板,resultStations 中的对象仍然存在,并且在服务器日志中我收到错误:

“删除相关锻炼站 600 时出错:未定义”

600 似乎不是一个有效的错误代码。

错误代码列表在这里

小智 5

查看本地 Parse 服务器 (\node_modules\parse\lib\node\ParseError.js) 上的 Parse.Error 定义,代码 600 表示聚合错误,如下所示:

    /**
 * Error code indicating that there were multiple errors. Aggregate errors
 * have an "errors" property, which is an array of error objects with more
 * detail about each error that occurred.
 * @property AGGREGATE_ERROR
 * @static
 * @final
 */
ParseError.AGGREGATE_ERROR = 600;
Run Code Online (Sandbox Code Playgroud)

这就解释了为什么error.message是未定义的。error.errors应该是一系列错误,这可以给您一些关于出了什么问题的提示。

至于根本原因,我感觉可能与 useMasterKey 的使用有关。我很久以前就开始使用 Promise,但如果我没记错的话,它应该是这样的(对于 destroyAll 部分):

Parse.Object.destroyAll(resultingStations, {
            success: function() {
                console.log('Did successfully delete');
            },
            error: function(error) {
                console.error("Error deleting related workout stations " + error.code + ": " + error.message);
            },
            useMasterKey: true
        });
Run Code Online (Sandbox Code Playgroud)