16.10.2020, 13:38
|
|
Профессор
|
|
Регистрация: 08.11.2017
Сообщений: 642
|
|
к сожалению, все что выложили, это мертвый код ), и смысла его подгонять "чтобы заработало" нет, лучше сформулируйте: есть табличка(и) такие-то в них лежит то-то, делаю запрос такой-то, и хочу получить то-то...
|
|
16.10.2020, 16:43
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,744
|
|
Сообщение от riaron
|
как передать переменную length и массив orderids в последний then
|
В каком коде?
Сначала у вас был один код. Я показал, как выполнять его с Promise. 3 запроса. Третий (sql1) должен выполняться после первых двух. Ничего передавать не надо было. length (start и end) считались в первом, orderids во втором, и к третьему запросу все должно быть уже вычbсленно.
Потом вы переделали код. Уже цикл с запросами...
Я этот код не совсем понимаю.
Он в принципе неверен.
|
|
16.10.2020, 16:44
|
Аспирант
|
|
Регистрация: 16.08.2020
Сообщений: 53
|
|
Как сжелать чтобы sql запрос выполнялся в цикле?
|
|
16.10.2020, 16:50
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,744
|
|
Сообщение от riaron
|
Как сжелать чтобы sql запрос выполнялся в цикле?
|
Это зависит от запросов и того, как обрабатывается результат.
Если запросы и их обработка полностью независимы друг от друга, то их можно выполнять параллельно, а потом просто ждать, когда они завершатся. (использовать Promise.all)
Если каждый следующий должен ждать завершения предыдущего, то надо делать цепочку обещаний и обработок.
|
|
16.10.2020, 17:35
|
Аспирант
|
|
Регистрация: 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.
|
|
18.10.2020, 21:23
|
Аспирант
|
|
Регистрация: 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
|
|
18.10.2020, 23:29
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,744
|
|
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.10.2020, 23:36
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,744
|
|
Сообщение от riaron
|
не могу сделать так чтобы length и orderids передались в последний then
|
А их и не надо передавать в then.
Они глобальные (внешние) в then они и так доступны.
Главное, что бы были к этому времени посчитаны.
|
|
19.10.2020, 09:25
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,744
|
|
Сообщение от 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.
|
|
19.10.2020, 20:16
|
Аспирант
|
|
Регистрация: 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.
|
|
|
|