Fungsi Parse Cloud gagal dengan kesalahan 141

Apa yang ingin saya capai adalah ketika saya memanggil fungsi cloud ini (deploy), pertama-tama ia akan menghapus semua data dari toClass, kemudian mengulangi objek di fromClass, menyalin dan menyimpannya ke toClass. Saat menyimpan suatu objek, ia juga akan menghapusnya dari fromClass. Sederhananya, pindahkan objek dari kelas ke kelas lainnya. Memanggil fungsi ini pada klien

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

Akan mencetak pesan kesalahan ini ke log klien: Error: undefined (Code: 141, Version: 1.2.19)

Berikut ini kode untuk 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);
        }
    });
});

Saya benar-benar tidak tahu banyak tentang JavaScript, jadi ini bisa menjadi kesalahan yang sangat sederhana.


person Sami    schedule 13.07.2014    source sumber


Jawaban (1)


Ada beberapa bagian yang dapat menjamin masalah bagi Anda: Meskipun tidak mempertanyakan desain Anda :

1) kueri tidak dirangkai bersama dan akan dijalankan secara bersamaan

2) Anda tidak dapat menggunakan

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

untuk menyalin properti dari satu objek ke objek lainnya. Anda perlu memanggil JSON.stringify(results[index]) untuk mendapatkan array standar. Anda harus menetapkan nilai seperti request.object.set(fiedlName, value) .

3) "indeks" tidak akan disebarkan dengan benar ke dalam subblok - masukkan ke konsol dan Anda akan melihatnya, karena kueri ini juga tidak dirangkai dan akan dijalankan sekaligus sehingga indeks akan memiliki beberapa nilai atau yang terakhir karena itu cepat

Namun, desain metode Anda dipertanyakan :

Basis data yang diurai sedikit berbeda dari basis data sql biasa, dan Anda mungkin harus mendesain ulang metode Anda mungkin menggunakan satu kelas dan hanya menandai kelas objek berdasarkan nama atau mengubah statusnya (dikerahkan = 0/1), sulit menebak siapa Anda mencoba mencapainya, tetapi cara Anda menjamin beberapa masalah.

Perhatikan juga bahwa fungsi cloudcode memiliki batas waktu sehingga setelah Anda memiliki lebih banyak objek, Anda mungkin tidak dapat menyimpan semuanya. (150 objek adalah pandangan optimis)

Anda dapat mencapai solusi Anda dengan menulis fungsi ".beforeSave" yang tepat yang dipicu saat Anda menyimpan objek, dengan cara ini Anda dapat mengganti objek lama dengan objek baru berdasarkan kriteria Anda...

person PetrV    schedule 13.07.2014
comment
Saran Anda tentang satu kelas dan negara bagian yang berbeda kedengarannya bagus. Saya akan mencobanya, tetapi saya harus menulis ulang logika sisi klien saya agar tidak langsung selesai. - person Sami; 13.07.2014