28.12.2016, 11:15
|
Аспирант
|
|
Регистрация: 18.07.2013
Сообщений: 43
|
|
Проблемка с видимостью
Всем привет. Столкнулся с проблемой:
Есть функция которая принимает данные для вставки в SQL.
Обработка ошибки SQL результата проходит в под функции. Как сделать что бы при ошибке производился выход из основной функции? строка 20.
Пробовал через переменную заданную в теле основной функции, в теле под функции она не меняется.
И бесит то что 28 строка первее выполняется чем 19, как с этим бороться?
mysql библиотека это npm mysql.
function add_data(ws,id,data){
if (typeof data == "undefined"){
ws.send(JSON.stringify({"id":id,"status":"error","reason":"bad data"}));
return;
}
for (var i=0;i<data.length;i++){
var rows = ['req_num', 'req_date', 'exec_date', 'exec_fio', 'exec_org', 'skuname', 'apparea', 'confchange', 'paramdescr', 'devices', 'attach', 'org', 'post', 'fio', 'org1', 'post1', 'fio1', 'org2', 'post2', 'fio2', 'org3', 'post3', 'fio3', 'change1', 'fio_ptk1', 'change2', 'fio_ptk2', 'change3', 'fio_ptk3', 'change4', 'fio_ptk4', 'change5', 'fio_ptk5', 'change6', 'fio_ptk6'];
for (var j=0;j<rows.length; j++){
if (typeof data[i][rows[j]] == undefined){
ws.send(JSON.stringify({"id":id,"status":"error","reason":"bad keys"}));
return false;
}
}
var post = {'req_num':data[i]['req_num'], 'req_date':data[i]['req_date'], 'exec_date':data[i]['exec_date'], 'exec_fio':data[i]['exec_fio'], 'exec_org':data[i]['exec_org'], 'skuname':data[i]['skuname'], 'apparea':data[i]['apparea'], 'confchange':data[i]['confchange'], 'paramdescr':data[i]['paramdescr'], 'devices':data[i]['devices'], 'attach':data[i]['attach'], 'org':data[i]['org'], 'post':data[i]['post'], 'fio':data[i]['fio'], 'org1':data[i]['org1'], 'post1':data[i]['post1'], 'fio1':data[i]['fio1'], 'org2':data[i]['org2'], 'post2':data[i]['post2'], 'fio2':data[i]['fio2'], 'org3':data[i]['org3'], 'post3':data[i]['post3'], 'fio3':data[i]['fio3'], 'change1':data[i]['change1'], 'fio_ptk1':data[i]['fio_ptk1'], 'change2':data[i]['change2'], 'fio_ptk2':data[i]['fio_ptk2'], 'change3':data[i]['change3'], 'fio_ptk3':data[i]['fio_ptk3'], 'change4':data[i]['change4'], 'fio_ptk4':data[i]['fio_ptk4'], 'change5':data[i]['change5'], 'fio_ptk5':data[i]['fio_ptk5'], 'change6':data[i]['change6'], 'fio_ptk6':data[i]['fio_ptk6'], 'sync':0};
var err = false;
var query = connection.query("INSERT INTO `db_requests` SET ?",post, function(err, result) {
if (err){
ws.send(JSON.stringify({"id":id,"status":"error","reason":err.code}));
return; // Как вот тут выйти из функции?
}
});
console.log(err);
}
ws.send(JSON.stringify({"id":id,"status":"ok","data":"done"}));
}
|
|
28.12.2016, 12:49
|
|
Профессор
|
|
Регистрация: 21.11.2015
Сообщений: 440
|
|
CrazyBite,
Цитата:
|
в теле под функции она не меняется
|
ты в том коллбеке своему err присвой true и после 23 строки проверь
if (err) return;
Цитата:
|
бесит то что 28 строка первее выполняется чем 19, как с этим бороться?
|
Цепочкой сделай чисто на посмотреть
|
|
28.12.2016, 13:43
|
Аспирант
|
|
Регистрация: 18.07.2013
Сообщений: 43
|
|
Сообщение от Coriolan161
|
ты в том коллбеке своему err присвой true и после 23 строки проверь
|
Пробовал - не получается:
var error = false;
var query = connection.query("(ERROR)INSERT INTO `db_requests` SET ?",post, function(err, result) {
if (err){
error = true;
console.log("inside:"+error);
ws.send(JSON.stringify({"id":id,"status":"error","reason":err.code}));
return;
}
});
console.log("outside:"+error);
Вывод:
[nodemon] starting `node server.js`
outside:false
inside:true
Про цепочку не понял.
|
|
28.12.2016, 14:04
|
|
Профессор
|
|
Регистрация: 21.11.2015
Сообщений: 440
|
|
CrazyBite,
Цитата:
|
Пробовал - не получается:
|
Да. не получится. там же асинхронный запрос и код идет дальше.
|
|
28.12.2016, 14:08
|
Аспирант
|
|
Регистрация: 18.07.2013
Сообщений: 43
|
|
Сообщение от Coriolan161
|
CrazyBite,
Да. не получится. там же асинхронный запрос и код идет дальше.
|
Что можно придумать в этом случае?
|
|
28.12.2016, 14:11
|
|
Профессор
|
|
Регистрация: 21.11.2015
Сообщений: 440
|
|
CrazyBite,
Цитата:
|
Про цепочку не понял
|
Короче просто проверь в коллбеке является ли индекс i == length-1 и положи туда ws.send(JSON.stringify({"id":id,"status":"ok","dat a":"done"}));
|
|
28.12.2016, 14:20
|
Аспирант
|
|
Регистрация: 18.07.2013
Сообщений: 43
|
|
Сообщение от Coriolan161
|
CrazyBite,
Короче просто проверь в коллбеке является ли индекс i == length-1 и положи туда ws.send(JSON.stringify({"id":id,"status":"ok","dat a":"done"}));
|
Не катит, если одна из строк выдаст ошибку это косяк... а не done. Наверно клиенту построчно буду выводить результаты, а он их должен будет отлавливать... неудобно как то...
Если придут в голову другие варианты - отпишитесь.
|
|
28.12.2016, 22:08
|
Новичок на форуме
|
|
Регистрация: 28.12.2016
Сообщений: 2
|
|
function add_data(ws,id,data){
if (typeof data == "undefined"){
ws.send(JSON.stringify({"id":id,"status":"error","reason":"bad data"}));
return;
}
for (var i=0;i<data.length;i++){
var rows = ['req_num', 'req_date', 'exec_date', 'exec_fio', 'exec_org', 'skuname', 'apparea', 'confchange', 'paramdescr', 'devices', 'attach', 'org', 'post', 'fio', 'org1', 'post1', 'fio1', 'org2', 'post2', 'fio2', 'org3', 'post3', 'fio3', 'change1', 'fio_ptk1', 'change2', 'fio_ptk2', 'change3', 'fio_ptk3', 'change4', 'fio_ptk4', 'change5', 'fio_ptk5', 'change6', 'fio_ptk6'];
for (var j=0;j<rows.length; j++){
if (typeof data[i][rows[j]] == undefined){
ws.send(JSON.stringify({"id":id,"status":"error","reason":"bad keys"}));
return false;
}
}
var post = {'req_num':data[i]['req_num'], 'req_date':data[i]['req_date'], 'exec_date':data[i]['exec_date'], 'exec_fio':data[i]['exec_fio'], 'exec_org':data[i]['exec_org'], 'skuname':data[i]['skuname'], 'apparea':data[i]['apparea'], 'confchange':data[i]['confchange'], 'paramdescr':data[i]['paramdescr'], 'devices':data[i]['devices'], 'attach':data[i]['attach'], 'org':data[i]['org'], 'post':data[i]['post'], 'fio':data[i]['fio'], 'org1':data[i]['org1'], 'post1':data[i]['post1'], 'fio1':data[i]['fio1'], 'org2':data[i]['org2'], 'post2':data[i]['post2'], 'fio2':data[i]['fio2'], 'org3':data[i]['org3'], 'post3':data[i]['post3'], 'fio3':data[i]['fio3'], 'change1':data[i]['change1'], 'fio_ptk1':data[i]['fio_ptk1'], 'change2':data[i]['change2'], 'fio_ptk2':data[i]['fio_ptk2'], 'change3':data[i]['change3'], 'fio_ptk3':data[i]['fio_ptk3'], 'change4':data[i]['change4'], 'fio_ptk4':data[i]['fio_ptk4'], 'change5':data[i]['change5'], 'fio_ptk5':data[i]['fio_ptk5'], 'change6':data[i]['change6'], 'fio_ptk6':data[i]['fio_ptk6'], 'sync':0};
var err = false;
var query = connection.query("INSERT INTO `db_requests` SET ?",post, function(err, result) {
if (err){
ws.send(JSON.stringify({"id":id,"status":"error","reason":err.code}));
return; // Как вот тут выйти из функции?
}
ws.send(JSON.stringify({"id":id,"status":"ok","data":"done"}));
});
console.log(err);
}
}
Вот так результат отправится после запроса в бд
А из функции у вас и так выйдет при ошибке! У вас же написано return. Возможно вы хотите что-то другое тут? Уточните ответ
Последний раз редактировалось Mirko1, 28.12.2016 в 22:12.
Причина: Форматирование кода, добавление описания
|
|
29.12.2016, 07:48
|
Аспирант
|
|
Регистрация: 18.07.2013
Сообщений: 43
|
|
Сообщение от Mirko1
|
Вот так результат отправится после запроса в бд
А из функции у вас и так выйдет при ошибке! У вас же написано return. Возможно вы хотите что-то другое тут? Уточните ответ
|
Этот return выходит из функции колбека conncetion.query.
|
|
30.12.2016, 21:43
|
Новичок на форуме
|
|
Регистрация: 28.12.2016
Сообщений: 2
|
|
напишите "return" вместо "var query =", в 17й строке
|
|
|
|