Проблемка с видимостью
Всем привет. Столкнулся с проблемой:
Есть функция которая принимает данные для вставки в 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"})); } |
CrazyBite,
Цитата:
if (err) return; Цитата:
|
Цитата:
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 Про цепочку не понял. |
CrazyBite,
Цитата:
|
Цитата:
|
CrazyBite,
Цитата:
|
Цитата:
Если придут в голову другие варианты - отпишитесь. |
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. Возможно вы хотите что-то другое тут? Уточните ответ |
Цитата:
|
напишите "return" вместо "var query =", в 17й строке
|
Часовой пояс GMT +3, время: 02:19. |