Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.12.2016, 11:15
Аспирант
Отправить личное сообщение для CrazyBite Посмотреть профиль Найти все сообщения от CrazyBite
 
Регистрация: 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"}));
}
Ответить с цитированием
  #2 (permalink)  
Старый 28.12.2016, 12:49
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

CrazyBite,
Цитата:
в теле под функции она не меняется
ты в том коллбеке своему err присвой true и после 23 строки проверь
if (err) return;


Цитата:
бесит то что 28 строка первее выполняется чем 19, как с этим бороться?
Цепочкой сделай чисто на посмотреть
Ответить с цитированием
  #3 (permalink)  
Старый 28.12.2016, 13:43
Аспирант
Отправить личное сообщение для CrazyBite Посмотреть профиль Найти все сообщения от CrazyBite
 
Регистрация: 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

Про цепочку не понял.
Ответить с цитированием
  #4 (permalink)  
Старый 28.12.2016, 14:04
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

CrazyBite,
Цитата:
Пробовал - не получается:
Да. не получится. там же асинхронный запрос и код идет дальше.
Ответить с цитированием
  #5 (permalink)  
Старый 28.12.2016, 14:08
Аспирант
Отправить личное сообщение для CrazyBite Посмотреть профиль Найти все сообщения от CrazyBite
 
Регистрация: 18.07.2013
Сообщений: 43

Сообщение от Coriolan161 Посмотреть сообщение
CrazyBite,
Да. не получится. там же асинхронный запрос и код идет дальше.
Что можно придумать в этом случае?
Ответить с цитированием
  #6 (permalink)  
Старый 28.12.2016, 14:11
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

CrazyBite,
Цитата:
Про цепочку не понял
Короче просто проверь в коллбеке является ли индекс i == length-1 и положи туда ws.send(JSON.stringify({"id":id,"status":"ok","dat a":"done"}));
Ответить с цитированием
  #7 (permalink)  
Старый 28.12.2016, 14:20
Аспирант
Отправить личное сообщение для CrazyBite Посмотреть профиль Найти все сообщения от CrazyBite
 
Регистрация: 18.07.2013
Сообщений: 43

Сообщение от Coriolan161 Посмотреть сообщение
CrazyBite,

Короче просто проверь в коллбеке является ли индекс i == length-1 и положи туда ws.send(JSON.stringify({"id":id,"status":"ok","dat a":"done"}));
Не катит, если одна из строк выдаст ошибку это косяк... а не done. Наверно клиенту построчно буду выводить результаты, а он их должен будет отлавливать... неудобно как то...
Если придут в голову другие варианты - отпишитесь.
Ответить с цитированием
  #8 (permalink)  
Старый 28.12.2016, 22:08
Новичок на форуме
Отправить личное сообщение для Mirko1 Посмотреть профиль Найти все сообщения от Mirko1
 
Регистрация: 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. Причина: Форматирование кода, добавление описания
Ответить с цитированием
  #9 (permalink)  
Старый 29.12.2016, 07:48
Аспирант
Отправить личное сообщение для CrazyBite Посмотреть профиль Найти все сообщения от CrazyBite
 
Регистрация: 18.07.2013
Сообщений: 43

Сообщение от Mirko1 Посмотреть сообщение

Вот так результат отправится после запроса в бд

А из функции у вас и так выйдет при ошибке! У вас же написано return. Возможно вы хотите что-то другое тут? Уточните ответ
Этот return выходит из функции колбека conncetion.query.
Ответить с цитированием
  #10 (permalink)  
Старый 30.12.2016, 21:43
Новичок на форуме
Отправить личное сообщение для Mirko1 Посмотреть профиль Найти все сообщения от Mirko1
 
Регистрация: 28.12.2016
Сообщений: 2

напишите "return" вместо "var query =", в 17й строке
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
fancybox проблемка dkv01 jQuery 12 30.12.2016 12:25
Проблемка с бордером элемента TH demoniqus (X)HTML/CSS 2 09.10.2013 13:15
Проблемка с селектом middle jQuery 10 25.08.2013 16:56
Проблемка с загрузкой форки Артем125 Общие вопросы Javascript 1 24.06.2010 14:52
Динамический JavaScript проблемка... andrys2007 Events/DOM/Window 3 06.12.2009 13:40