Nano Hash - криптовалюты, майнинг, программирование

Разобрать облачный код после двойного срабатывания сохранения.

У меня есть послесохранение облачного кода Parse. Я внес изменения в таблицу один раз, но хук после сохранения срабатывает дважды

1-е обновление (фактическое обновление)

Input: {"object":{"addedBy":"tt","albumTitle":"ggh","approved":true,
"createdAt":"2015-12-14T03:07:27.253Z","image":
{"__type":"File","name":"tfss-e26ec608-5a0b-46a2-91db-33590139c4b3-
newImage.jpg","url":"http://files.parsetfss.com/0accbdba-e3f2-493d-
ac70-1c6bccc367b9/tfss-e26ec608-5a0b-46a2-91db-33590139c4b3-
newImage.jpg"},"objectId":"p4pLO70gQY","updatedAt":"2015-12-
14T03:07:37.733Z"}}

2-е обновление (не должно происходить)

Input: {"object":{"addedBy":"tt","albumTitle":"ggh","approved":true,
"createdAt":"2015-12-14T03:07:27.253Z","image":
{"__type":"File","name":"tfss-e26ec608-5a0b-46a2-91db-33590139c4b3-
newImage.jpg","url":"http://files.parsetfss.com/0accbdba-e3f2-493d-
ac70-1c6bccc367b9/tfss-e26ec608-5a0b-46a2-91db-33590139c4b3-
newImage.jpg"},"objectId":"p4pLO70gQY","updatedAt":"2015-12-
14T03:07:38.038Z"}}

Единственная разница между двумя обновлениями — это время updatedAt. Будет ли срабатывать послесохранение, даже если время обновления изменится?

Как я могу избежать второго выполнения после сохранения?

Вот мой облачный код:

Parse.Cloud.afterSave("Photos", function (request) {

    var albumNameA = "";
    var publicUser = "";
    var albumOwner = "";
    var photoUniqueId = "";
    var isApproved = "";

    albumNameA = request.object.get("albumTitle");
    publicUser = request.object.get("addedBy");
    photoUniqueId = request.object.id;
    isApproved = request.object.get("approved");

    if (request.object.get("createdAt").getTime() == request.object.get("updatedAt").getTime()) {
        var getAlbumOwner = new Parse.Object.extend("Albums");
        var q3 = new Parse.Query(getAlbumOwner);
        q3.equalTo("title", albumNameA);
        q3.first({
            success: function (results) {
                console.log("Checking for Creator name " + results.get("creatorName"));
                albumOwner = results.get("creatorName");
                console.log("Uploading a Photo Final " + albumNameA + "-by-" + publicUser + "--ownedby--" + albumOwner);
                console.log("Uploading a Photo" + albumNameA + "-by-" + publicUser + "--" + photoUniqueId + "--" + isApproved);
                var install = new Parse.Object.extend("Installation");
                var q2 = new Parse.Query(install);
                q2.equalTo("privacy", privateUserNo);
                q2.equalTo("username", albumOwner);
                q2.find({
                    success: function (results) {
                        if (!isApproved) {
                            Parse.Push.send({
                                where: q2, // Set our Installation query
                                data: {
                                    alert: "New Photo uploaded by  " + publicUser + " ,waiting for approval"
                                }
                            }, {
                                success: function () {
                                    // Push was successful
                                    console.log("Push success");
                                },
                                error: function (error) {
                                    // Handle error
                                    console.log("Push error");
                                }
                            })
                        }
                    },
                    error: function (error) {
                        console.log("Error: " + error.code + " " + error.message);
                    }
                });
            },
            error: function (error) {
                console.log("Error: " + error.code + " " + error.message);
            }

        });
    } else if (!(request.object.get("createdAt").getTime() == request.object.get("updatedAt").getTime())) {
        console.log("all case scenarios");
        var getAlbumOwner1 = new Parse.Object.extend("Albums");
        var q6 = new Parse.Query(getAlbumOwner1);
        q6.equalTo("title", albumNameA);
        q6.first({
            success: function (results) {
                albumOwner = results.get("creatorName");
                var sendApproval = new Parse.Object.extend("Photos");
                var q4 = new Parse.Query(sendApproval);
                q4.descending("updatedAt");
                q4.first({
                    success: function (results) {
                        var objectIDNeeded = results.id;
                        var isChanged = results.get("approved");
                        var currentUpdateTime = results.get("updatedTime");
                        console.log("Your Photo,  " + publicUser + " ,has been approved by " + albumOwner);
                        var install = new Parse.Object.extend("Installation");
                        var q5 = new Parse.Query(install);
                        q5.equalTo("privacy", privateUserNo);
                        q5.equalTo("username", publicUser);
                        q5.find({
                            success: function (results) {
                                Parse.Push.send({
                                    where: q5, // Set our Installation query
                                    data: {
                                        alert: "Your Photo has been approved by " + albumOwner
                                    }
                                }, {
                                    success: function () {
                                        // Push was successful
                                        console.log("Push success");
                                    },
                                    error: function (error) {
                                        // Handle error
                                        console.log("Push error");
                                    }
                                })
                            },
                            error: function (error) {
                                console.log("Error: " + error.code + " " + error.message);
                            }
                        });
                    },
                    error: function (error) {
                        console.log("Error: " + error.code + " " + error.message);
                    }

                });
            },
            error: function (error) {
                console.log("Error: " + error.code + " " + error.message);
            }
        });
    }
});

  • Почти наверняка объект сохраняется дважды. Давайте разберемся, почему. 14.12.2015
  • Это огромный код. Я обновил код. В основном избыточный код, так как я новичок в parse.com 14.12.2015
  • откуда вызов этой функции.?. вы можете сравнить перед вызовом этого. 14.12.2015
  • Используете ли вы Parse.Promise.when? У меня такая же проблема, только когда я вызываю запрос через Parse.Promise.when. 14.12.2015
  • Как насчет этого вопроса? stackoverflow.com/questions/26929709 / 14.12.2015
  • Нет, я не использовал Parse.Promise.when @Nobuhito Kurose 14.12.2015
  • покажите нам код, где вы вызываете сохранение, пожалуйста. 14.12.2015

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..