ฟังก์ชัน Parse Cloud ล้มเหลวโดยมีข้อผิดพลาด 141

สิ่งที่ฉันพยายามทำให้สำเร็จคือเมื่อฉันเรียกใช้ฟังก์ชันคลาวด์นี้ (deploy) โดยจะลบข้อมูลทั้งหมดออกจาก toClass ก่อน จากนั้นวนซ้ำอ็อบเจ็กต์ใน fromClass คัดลอกและบันทึกลงใน toClass เมื่อบันทึกวัตถุ มันจะลบออกจาก fromClass ด้วย พูดง่ายๆ ก็คือย้ายวัตถุจากชั้นเรียนไปยังอีกชั้นเรียนหนึ่ง การเรียกใช้ฟังก์ชันนี้บนไคลเอ็นต์

[PFCloud callFunctionInBackground:@"deploy" withParameters:@{@"toClass": kTilrClassUpdates, @"fromClass": kTilrClassPrototypeUpdates} block:^(id object, NSError *error) {
    if (error) {
        [self failed];
    } else {
        [self succeeded];
    }
}];

จะพิมพ์ข้อความแสดงข้อผิดพลาดนี้ไปยังบันทึกไคลเอ็นต์: Error: undefined (Code: 141, Version: 1.2.19)

นี่คือรหัสสำหรับ Parse Cloud:

Parse.Cloud.define("deploy", function(request, response) {
    var query = new Parse.Query(request.params.toClass);
    query.find({
        success: function(results) {
            for (var i = 0; i < results.length; ++i) {
                console.log(results[i]);
                results[i].destroy({
                    success: function(object) {

                    },
                    error: function(object, error) {
                        response.error(error);
                    }
                });
            }
        },
        error: function() {
            response.error(error);
        }
    });
    var query2 = new Parse.Query(request.params.fromClass);
    query2.find({
        success: function(results) {
            for (var index = 0; index < results.length; ++index) {
                var UpdateInfoClass = Parse.Object.extend(request.params.toClass);
                var updateInfo = new UpdateInfoClass();
                for (var k in results[index]) {
                    updateInfo.set(k, results[index][k]);
                }
                console.log(updateInfo);
                updateInfo.save(null, {
                    success: function(updateInfo) {
                        results[index].destroy();
                        if (index == results.length - 1) {
                            response.success();
                        }
                    },
                    error: function(updateInfo, error) {
                        response.error(error);
                    }
                });
            }
        },
        error: function() {
            response.error(error);
        }
    });
});

ฉันไม่รู้เกี่ยวกับ JavaScript มากนัก ดังนั้นนี่อาจเป็นข้อผิดพลาดง่ายๆ ที่ไหนสักแห่ง


person Sami    schedule 13.07.2014    source แหล่งที่มา


คำตอบ (1)


มีสองส่วนที่สามารถรับประกันปัญหาสำหรับคุณ: ในขณะที่ไม่ตั้งคำถามกับการออกแบบของคุณ:

1) แบบสอบถามไม่ได้ถูกเชื่อมโยงเข้าด้วยกันและจะทำงานพร้อมกัน

2) คุณไม่สามารถใช้

for (var k in results[index]) {
    updateInfo.set(k, results[index][k]);
}

เพื่อคัดลอกคุณสมบัติจากวัตถุหนึ่งไปยังอีกวัตถุหนึ่ง คุณต้องโทร JSON.stringify(results[index]) เพื่อรับอาร์เรย์มาตรฐาน คุณควรตั้งค่าโดยการกดไลค์ request.object.set(fiedlName, value)

3) "ดัชนี" จะไม่ได้รับการเผยแพร่อย่างถูกต้องไปยังบล็อกย่อย - ล็อกอินเข้าสู่คอนโซลแล้วคุณจะเห็น เพราะการสืบค้นเหล่านี้ไม่ได้ถูกเชื่อมโยงกันและมันจะทำงานพร้อมกันดังนั้นดัชนีจะมีค่าบางส่วนหรือค่าสุดท้ายเพราะมันเป็น เร็ว

อย่างไรก็ตาม การออกแบบวิธีการของคุณยังเป็นที่น่าสงสัย :

ฐานข้อมูลในการแยกวิเคราะห์แตกต่างจากฐานข้อมูล sql ทั่วไปเล็กน้อย และคุณควรออกแบบวิธีการของคุณใหม่โดยใช้คลาสเดียวและเพียงทำเครื่องหมายคลาสของวัตถุด้วยชื่อหรือเปลี่ยนสถานะ (ปรับใช้ = 0 / 1) มันยากที่จะเดาว่าคุณเป็นใคร พยายามที่จะบรรลุผลสำเร็จ แต่วิธีการของคุณรับประกันปัญหาบางอย่าง

โปรดทราบว่าฟังก์ชัน cloudcode จะมีระยะหมดเวลา ดังนั้นเมื่อคุณมีออบเจ็กต์มากขึ้น คุณอาจไม่สามารถบันทึกออบเจ็กต์ทั้งหมดได้ (วัตถุ 150 ชิ้นเป็นมุมมองในแง่ดี)

คุณอาจบรรลุผลสำเร็จด้วยการเขียนฟังก์ชัน ".beforeSave" ที่เหมาะสม ซึ่งจะเริ่มทำงานเมื่อคุณบันทึกออบเจ็กต์ ด้วยวิธีนี้ คุณสามารถแทนที่ออบเจ็กต์เก่าด้วยออบเจ็กต์ใหม่ตามเกณฑ์ของคุณ...

person PetrV    schedule 13.07.2014
comment
ข้อเสนอแนะของคุณเกี่ยวกับชั้นเรียนหนึ่งและสถานะที่แตกต่างกันฟังดูดีมาก ฉันจะลองดู แต่ฉันต้องเขียนตรรกะฝั่งไคลเอ็นต์ใหม่ จึงไม่สำเร็จในทันที - person Sami; 13.07.2014