Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 16.10.2020, 13:38
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

к сожалению, все что выложили, это мертвый код ), и смысла его подгонять "чтобы заработало" нет, лучше сформулируйте: есть табличка(и) такие-то в них лежит то-то, делаю запрос такой-то, и хочу получить то-то...
Ответить с цитированием
  #12 (permalink)  
Старый 16.10.2020, 16:43
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,700

Сообщение от riaron
как передать переменную length и массив orderids в последний then
В каком коде?
Сначала у вас был один код. Я показал, как выполнять его с Promise. 3 запроса. Третий (sql1) должен выполняться после первых двух. Ничего передавать не надо было. length (start и end) считались в первом, orderids во втором, и к третьему запросу все должно быть уже вычbсленно.
Потом вы переделали код. Уже цикл с запросами...
Я этот код не совсем понимаю.
Он в принципе неверен.
Ответить с цитированием
  #13 (permalink)  
Старый 16.10.2020, 16:44
Аспирант
Отправить личное сообщение для riaron Посмотреть профиль Найти все сообщения от riaron
 
Регистрация: 16.08.2020
Сообщений: 53

Как сжелать чтобы sql запрос выполнялся в цикле?
Ответить с цитированием
  #14 (permalink)  
Старый 16.10.2020, 16:50
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,700

Сообщение от riaron
Как сжелать чтобы sql запрос выполнялся в цикле?
Это зависит от запросов и того, как обрабатывается результат.
Если запросы и их обработка полностью независимы друг от друга, то их можно выполнять параллельно, а потом просто ждать, когда они завершатся. (использовать Promise.all)
Если каждый следующий должен ждать завершения предыдущего, то надо делать цепочку обещаний и обработок.
Ответить с цитированием
  #15 (permalink)  
Старый 16.10.2020, 17:35
Аспирант
Отправить личное сообщение для riaron Посмотреть профиль Найти все сообщения от riaron
 
Регистрация: 16.08.2020
Сообщений: 53

хочу чтобы
сначала var sql3='SELECT `id` FROM `orders`'; по промису
потом
var sql2='SELECT `orderid` FROM `orders` GROUP BY `orderid` limit start,end';
в третьем промисе уже бес последующих промисов
var sql1 ='SELECT `id`,`prod`,`name`,`photo`,`price`,`sale`,`remote_ adr`,`quantity` FROM `orders` where orderid=?'; в цикле
не могу сделать так чтобы length и orderids передались в последний then
app.get('/orders/:page', (req, res) => {
    var connection = getMySQLConnection();
    var smartphone=[];
    var allsmartphone={};
    var smartphoneList=[];
    var allprice=0;
    var a;
    var b;
    var length;
	var orderids;
	var start;
	var end;
	var allprice;
	start=(req.params.page-1)*10;
	end=req.params.page*10;
	var sql3='SELECT `id` FROM `orders`';
	var sql2='SELECT `orderid` FROM `orders` GROUP BY  `orderid`';
	var sql1 ='SELECT `id`,`prod`,`name`,`photo`,`price`,`sale`,`remote_adr`,`quantity` FROM `orders` WHERE orderid=?';
	function pquery (con, sql, par) {
		return new Promise ( (res, rej) => {
			con.query (sql, par,  (err, result) => {
					if (err) {
						rej (err);
					} else {
						res (result);
					}
	
			});
	
		});
	}

	Promise.all([
		pquery (connection, sql3, []).then( resulta => {
			length=resulta.length;
			if(start<0){start=0;}
			if(end>(length-req.params.page*10)%10){end=length;}
		}),
		pquery (connection, sql2, []).then( result => {
			orderids=result;
		})
	]).then ( () => {
			

	for(var j=0;j<orderids.length;j++) {
		connection.connect(function(err) {
			connection.query(sql, [orderids[j]], function (err, result) {
				for (var i = 0; i < results.length; i++) {
					// Create the object to save the data.
					b = results[i].price - results[i].price * results[i].sale / 100;
					a = b * results[i].quantity;
					allprice += a;
					var smart = {
						'id': results[i].id,
						'prod': results[i].prod,
						'name': results[i].name,
						'photo': results[i].photo,
						'sale': results[i].sale,
						'price': results[i].price,
						'tsale': b,
						'vsego': a,
						'quantity': results[i].quantity,
						'allprice': allprice,
					};
					smartphone.push(smart);
				}
			});
			allsmartphone.push= smartphone;
		});
	});
					console.log(orderids);

			res.render('orders', {"smartphoneList": smartphoneList,"allsmartphone": allsmartphone,'orderids':orderids});*/
		});
});

Последний раз редактировалось riaron, 17.10.2020 в 17:24.
Ответить с цитированием
  #16 (permalink)  
Старый 18.10.2020, 21:23
Аспирант
Отправить личное сообщение для riaron Посмотреть профиль Найти все сообщения от riaron
 
Регистрация: 16.08.2020
Сообщений: 53

\app.js:159
bb[1]=resulta;
^^

SyntaxError: Unexpected identifier
←[90m at wrapSafe (internal/modules/cjs/loader.js:1053:16)←[39m
←[90m at Module._compile (internal/modules/cjs/loader.js:1101:27)←[39m
←[90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)←[39m
←[90m at Module.load (internal/modules/cjs/loader.js:985:32)←[39m
←[90m at Function.Module._load (internal/modules/cjs/loader.js:878:14)←[39m
←[90m at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)←[39m
←[90m at internal/main/run_main_module.js:17:47←[39m

C:\xampp\htdocs\mysite.local>node app
C:\xampp\htdocs\mysite.local\app.js:159
bb[1]=resulta;
^^

SyntaxError: Unexpected identifier
←[90m at wrapSafe (internal/modules/cjs/loader.js:1053:16)←[39m
←[90m at Module._compile (internal/modules/cjs/loader.js:1101:27)←[39m
←[90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)←[39m
←[90m at Module.load (internal/modules/cjs/loader.js:985:32)←[39m
←[90m at Function.Module._load (internal/modules/cjs/loader.js:878:14)←[39m
←[90m at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)←[39m
←[90m at internal/main/run_main_module.js:17:47←[39m



app.get('/orders/:page', (req, res) => {
    var connection = getMySQLConnection();
    var smartphone=[];
    var allsmartphone={};
    var smartphoneList=[];
    var allprice=0;
    var a;
    var b;
    var length;
	var orderids;
	var start;
	var end;
	var allprice;
	var bb=[];
	start=(req.params.page-1)*10;
	end=req.params.page*10;
	var sql3='SELECT `id` FROM `orders`';
	var sql2='SELECT `orderid` FROM `orders` GROUP BY  `orderid`';
	var sql1 ='SELECT `id`,`prod`,`name`,`photo`,`price`,`sale`,`remote_adr`,`quantity` FROM `orders` WHERE orderid=?';
	function pquery (con, sql, par) {
		return new Promise ( (res, rej) => {
			con.query (sql, par,  (err, result) => {
					if (err) {
						rej (err);
					} else {
						res (result);
					}
	
			});
	
		});
	}

	Promise.all([
		pquery (connection, sql3, []).then( resulta => {
			length=resulta.length;
			if(start<0){start=0;}
			if(end>(length-req.params.page*10)%10){end=length;}
		}),
		pquery (connection, sql2, []).then( result => {
			orderids=result;
		})
		 bb[1]=resulta;
		 bb[2]=result;
	]).then ( (bb) => {
			

	/*for(var j=0;j<orderids.length;j++) {
		connection.connect(function(err) {
			connection.query(sql, [orderids[j]], function (err, result) {
				for (var i = 0; i < results.length; i++) {
					// Create the object to save the data.
					b = results[i].price - results[i].price * results[i].sale / 100;
					a = b * results[i].quantity;
					allprice += a;
					var smart = {
						'id': results[i].id,
						'prod': results[i].prod,
						'name': results[i].name,
						'photo': results[i].photo,
						'sale': results[i].sale,
						'price': results[i].price,
						'tsale': b,
						'vsego': a,
						'quantity': results[i].quantity,
						'allprice': allprice,
					};
					smartphone.push(smart);
				}
			});
			allsmartphone.push= smartphone;
		});
	});*/
					console.log("len: " + bb[1]+" orderids: "+bb[2]);

			//res.render('orders', {"smartphoneList": smartphoneList,"allsmartphone": allsmartphone,'orderids':orderids});*/
		});
});

не передается bb
Ответить с цитированием
  #17 (permalink)  
Старый 18.10.2020, 23:29
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,700

Promise.all([
        pquery (connection, sql3, []).then( resulta => {
            length=resulta.length;
            if(start<0){start=0;}
            if(end>(length-req.params.page*10)%10){end=length;}
        }),
        pquery (connection, sql2, []).then( result => {
            orderids=result;
        })
         bb[1]=resulta;
         bb[2]=result;
    ])

Ну что за ерунда.
Promise.all
https://developer.mozilla.org/ru/doc...ts/Promise/all

Параметром функции должен быть МАССИВ Promise.
А это что такое?
bb[1]=resulta;
bb[2]=result;


var bb=[];
.....

.then ( (bb) => {

Это совсем разные bb
Первая - просто переменная
Вторая - параметр функции в then
Ответить с цитированием
  #18 (permalink)  
Старый 18.10.2020, 23:36
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,700

Сообщение от riaron
не могу сделать так чтобы length и orderids передались в последний then
А их и не надо передавать в then.
Они глобальные (внешние) в then они и так доступны.
Главное, что бы были к этому времени посчитаны.
Ответить с цитированием
  #19 (permalink)  
Старый 19.10.2020, 09:25
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,700

Сообщение от riaron
хочу чтобы
сначала var sql3='SELECT `id` FROM `orders`'; по промису
потом
var sql2='SELECT `orderid` FROM `orders` GROUP BY `orderid` limit start,end';
Только что заметил, что вы изменили запросы, и теперь sql2 должен выполняться после sql3, т.к. использует start,end, которые вычисляются после sql3.
Ну тут же совсем другая логика. И Promise.all совсем не нужен.

var sql3='SELECT `id` FROM `orders`';
 
pquery (connection, sql3, []).then( resulta => {
     length=resulta.length;
     if(start<0){start=0;}
     if(end>(length-req.params.page*10)%10){end=length;}

     var sql2='SELECT `orderid` FROM `orders` GROUP BY  `orderid` limit '+ start +', '+ end';

      return  pquery (connection, sql2, []).then( result => {
            orderids=result;
     })
})

Последний раз редактировалось voraa, 19.10.2020 в 09:33.
Ответить с цитированием
  #20 (permalink)  
Старый 19.10.2020, 20:16
Аспирант
Отправить личное сообщение для riaron Посмотреть профиль Найти все сообщения от riaron
 
Регистрация: 16.08.2020
Сообщений: 53

так не работает
ничего не выдает т.е. не входи в цикл j
app.get('/orders/:page', (req, res) => {
    var connection = getMySQLConnection();
    var smartphone=[];
    var allsmartphone=[];
    var smartphoneList=[];
    var allprice=0;
    var a;
    var b;
    var length;
	var orderids;
	var start;
	var end;
	var allprice;
	start=(req.params.page-1)*10;
	end=req.params.page*10;
	var sql2='SELECT `orderid` FROM `orders` GROUP BY  `orderid`';
	var sql1 ='SELECT `id`,`prod`,`name`,`photo`,`price`,`sale`,`remote_adr`,`quantity` FROM `orders` WHERE orderid=?';
	connection.connect(function(err) {
		if(err){
			console.log(err);
		}else{
				connection.query(sql2, [], function (err, resulta) {        
			length=resulta.length;
			if(start<0){start=0;}
			if(end>(length-req.params.page*10)%10){end=length;}
				orderids=resulta;
	
	for(var j=0;j<orderids.length;j++) {
	    smartphone=[];

			connection.query(sql1, [orderids[j]], function (err, results) {
				if(err){
					console.log(err);
				}else{
					for (var i = 0; i < results.length; i++) {
						// Create the object to save the data.
						b = results[i].price - results[i].price * results[i].sale / 100;
						a = b * results[i].quantity;
						allprice += a;
						var smart = {
							'id': results[i].id,
							'prod': results[i].prod,
							'name': results[i].name,
							'photo': results[i].photo,
							'sale': results[i].sale,
							'price': results[i].price,
							'tsale': b,
							'vsego': a,
							'quantity': results[i].quantity,
							'allprice': allprice,
						};
						smartphone.push(smart);
						console.log(smartphone);
										console.log(orderids);
	
					}
				}
			});
		
					//allsmartphone[orderids[j]].push(smartphone);
 
	};
					

			//res.render('orders', {"smartphoneList": smartphoneList,"allsmartphone": allsmartphone,'orderids':orderids});
		});		
};
});
});

Последний раз редактировалось riaron, 19.10.2020 в 23:55.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где может быть ошибка в скрипте? LADYX Элементы интерфейса 0 14.04.2017 15:28
setTimeout где ошибка? кирикала Элементы интерфейса 5 05.09.2016 13:53
Не могу понять, где ошибка в коде Darya_kod Общие вопросы Javascript 5 10.07.2016 22:13
Не могу понять Замыкание. slip AJAX и COMET 7 19.01.2013 14:40
не могу понять в чём ошибка scuter Общие вопросы Javascript 2 28.08.2008 15:22