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

Parse Server Cloud Code destroyAll fails with unhelpful error

我正在将一些以前工作的云代码更新到新的 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 });
});

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

"Error deleting related workout stations 600: undefined"

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

Error code list here

查看我本地 Parse Server (\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;

这解释了为什么 error.message 未定义。 error.errors 应该是一个错误数组,它可以给你一些提示,告诉你出了什么问题。

至于根本原因,我感觉可能与useMasterKey的使用有关。我很久以前就开始使用 Promises,但如果我没记错的话应该是这样的(对于 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
        });