Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.12.2017, 11:15
Интересующийся
Отправить личное сообщение для jtag Посмотреть профиль Найти все сообщения от jtag
 
Регистрация: 12.01.2016
Сообщений: 19

Как проще писать код?
Всем добрый день использую модуль mysql. Написал вот такой код запросов в БД. Пишу как умею. Что-то сложно становится его отлаживать, да и дополнять его тоже трудновато. Путаница. Может дадите советов как упростить код? Ну может где-то типичные ошибки имеются которых я не замечаю?

Вот код:
con.query("SELECT * FROM xml_person WHERE done='0' ORDER BY id_xml_person  ASC", function (err, resultFromXml_person) {
    if (err) throw err;
    if (resultFromXml_person.length != 0) {                               //если ответ не пустой
        console.log("result.length: ", resultFromXml_person.length);
        var x = 0;
        var timer = setInterval(function () {


            con.beginTransaction(function (err) {
                if (err) {
                    throw err;
                }

                

                if (resultFromXml_person[x].iin && resultFromXml_person[x].surname) {        //если имеется фамилия или ИИН


                    con.query("SELECT * FROM person WHERE iin='" + resultFromXml_person[x].iin + "'", function (err, resultFromPerson) {      //запрос в person строки с таким иин
                        if (err) {
                            return con.rollback(function () {
                                throw err;
                            });
                        }
                        if (resultFromPerson.length == 0) {             //если такой строки не существует
                            console.log("такой иин в person отсутствует");
                            con.query("INSERT INTO subject (idsubject) VALUES(NULL)", function (err, resultFromSubject) {
                                if (err) {
                                    return con.rollback(function () {
                                        throw err;
                                    });
                                }
                                let sex = -1;

                                if (resultFromXml_person[x].pol === "Женский") {
                                    sex = 0;
                                }
                                else if (resultFromXml_person[x].pol === "Мужской") {
                                    sex = 1;
                                }
                                con.query("INSERT INTO `person` (`idperson`, `iin`, `surname`, `name`, `middlename`, `birthday`, " +
                                    "`sex`, `change_date`) VALUES ('" + resultFromSubject.insertId + "', '" + resultFromXml_person[x].iin + "', '" + resultFromXml_person[x].surname + "', '" + resultFromXml_person[x].name +
                                    "', '" + resultFromXml_person[x].patronymic + "', '" + resultFromXml_person[x].birthday + "', '" + sex + "', NULL)", function (err) {
                                    if (err) {
                                        return con.rollback(function () {
                                            throw err;
                                        });
                                    }

                                    let phone = resultFromXml_person[x].tel.split(", ")[1];

                                    con.query("SELECT * FROM person LEFT JOIN  phone ON person.idperson=phone.id_person WHERE iin='" + resultFromXml_person[x].iin + "'", function (err, resultFromPhones) {
                                        if (err) {
                                            return con.rollback(function () {
                                                throw err;
                                            });
                                        }


                                        con.query("UPDATE xml_person SET done='4' WHERE id_xml_person='" + resultFromXml_person[x].id_xml_person + "'", function (err, result) {
                                            if (err) {
                                                return con.rollback(function () {
                                                    throw err;
                                                });
                                            }
                                            console.log("done=4, новая строка");
                                            x++;
                                            checkEnd2(x, resultFromXml_person, timer);
                                            con.commit(function (err) {
                                                if (err) {
                                                    return con.rollback(function () {
                                                        throw err;
                                                    });
                                                }
                                            });
                                        });

                                      
                                    });
                                });
                            })
                        }
                        else {
                            console.log("такой иин в person имеется");

                            if (resultFromXml_person[x].iin === resultFromPerson[0].iin && resultFromXml_person[x].surname === resultFromPerson[0].surname && resultFromXml_person[x].name === resultFromPerson[0].name && resultFromXml_person[x].patronymic === resultFromPerson[0].middlename && resultFromXml_person[x].birthday === resultFromPerson[0].birthday && resultFromXml_person[x].pol === resultFromPerson[0].sex) {
                                con.query("UPDATE xml_person SET done='1' WHERE id_xml_person='" + resultFromXml_person[x].id_xml_person + "'", function (err, result) {
                                    if (err) {
                                        return con.rollback(function () {
                                            throw err;
                                        });
                                    }
                                    console.log("done=1, без изменений");
                                    x++;
                                    checkEnd2(x, resultFromXml_person, timer);
                                    con.commit(function (err) {
                                        if (err) {
                                            return con.rollback(function () {
                                                throw err;
                                            });
                                        }
                                    });
                                });
                            } else {
                                console.log("id_xml_person", resultFromXml_person[x].id_xml_person);

                                con.query("UPDATE person SET surname='" + resultFromXml_person[x].surname + "', name='" + resultFromXml_person[x].name + "', middlename='" + resultFromXml_person[x].patronymic +
                                    "', birthday='" + resultFromXml_person[x].birthday + "', sex='" + resultFromXml_person[x].pol + "', change_date='" + moment().format("YYYY-MM-DD HH:mm:ss") + "' WHERE iin='" + resultFromXml_person[x].iin + "'", function (err) {
                                    if (err) {
                                        return con.rollback(function () {
                                            throw err;
                                        });
                                    }
                                    con.query("UPDATE xml_person SET done='2' WHERE id_xml_person='" + resultFromXml_person[x].id_xml_person + "'", function (err, result) {
                                        if (err) {
                                            return con.rollback(function () {
                                                throw err;
                                            });
                                        }
                                        console.log("done=2, обновлено");
                                        x++;
                                        checkEnd2(x, resultFromXml_person, timer);
                                        con.commit(function (err) {
                                            if (err) {
                                                return con.rollback(function () {
                                                    throw err;
                                                });
                                            }
                                        });
                                    });
                                });
                            }
                        }
                    });

                } else { ...
Ответить с цитированием
  #2 (permalink)  
Старый 05.12.2017, 11:24
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

jtag,
Первое что бросается в глаза - это ад коллбэков. Упростить можно через async / await.
Ответить с цитированием
  #3 (permalink)  
Старый 05.12.2017, 14:09
Интересующийся
Отправить личное сообщение для jtag Посмотреть профиль Найти все сообщения от jtag
 
Регистрация: 12.01.2016
Сообщений: 19

А что вы думаете о модуле Sequilize? Может его стоит попробовать? http://docs.sequelizejs.com/
Ответить с цитированием
  #4 (permalink)  
Старый 05.12.2017, 18:08
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

jtag,
Можно и попробовать. Как раз всё на Bluebird промисах написано, с async / await -- то что доктор прописал.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше защитить код от копирования на другой сайт? Опан Общие вопросы Javascript 10 21.08.2015 21:29
как писать html код внутри js не в одну строку ? mitiya Общие вопросы Javascript 6 07.04.2014 14:33
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как получит ссылку на элемент внутри которого запустили JS код? aRpi Events/DOM/Window 20 02.10.2011 13:36