当我们要执行从另一个查询中获取输出的查询时,会遇到问题。
connection.query(`SELECT * from Database.table1`, function (err, rows, fields) {
for (var item of rows) {
allcounts += item.count
number = item.number
console.log(allcounts)
console.log(number)
connection.query(`DELETE from Database.table2 where numbers = ${number}`, function (err, rows, fields) {
console.log("delete successfull")
})
console.log("Step One finished !")
}
})
它应该工作的方式是,第一个查询中的行返回两个JSON对象。每个对象代表具有计数(计数)和产品编号(数字)的特定产品。该产品应在数据库的另一个表中删除。
您可以看到我们想要遍历第一条语句的输出(行),并使用此输出(行)执行另一条语句。这行得通,但express是在错误的方向执行代码...
在这里输出:
0.89
12345
Step One finished!
2.28
32598
Step One finished!
delete successfull
delete successfull
它向我们显示了数字,并正确地增加了计数! 奇怪的是,两个查询都在两个计数加完并显示数字之后才执行。
我们尝试了几种解决方案,但没有一个适合我们。
如果有人能尽快帮助我们,那就太好了:)
答案 0 :(得分:0)
问题是您的for循环在继续下一次迭代之前不会等待 asynchronous public static byte[] NV21toYUV420Planar(byte[] input, byte[] output, int width, int height) {
final int frameSize = width * height;
final int qFrameSize = frameSize/4;
System.arraycopy(input, 0, output, 0, frameSize); // Y
byte v, u;
for (int i = 0; i < qFrameSize; i++) {
v = input[frameSize + i*2];
u = input[frameSize + i*2 + 1];
output[frameSize + i + qFrameSize] = v;
output[frameSize + i] = u;
}
return output;
}
完成。
您可以使用promises解决该问题。
我在下面包含了一些使用诺言的注释示例代码
(未经测试,因此您可能不得不解决一个错误)。
注意:
connection.query()
答案 1 :(得分:0)
You can try with 2 solutions other than promises
1) using anonymous function which blocks the for loop for next iteration untill the query is executed
connection.query(`SELECT * from Database.table1`, function (err, rows, fields) {
for (var item of rows) {
(function (item){
allcounts += item.count
number = item.number
console.log(allcounts)
console.log(number)
connection.query(`DELETE from Database.table2 where numbers = ${number}`, function (err, rows, fields) {
console.log("delete successfull")
})
console.log("Step One finished !")
})(item);
}
})
2) using IN in where clause
at takes the output from another query.
connection.query(`SELECT * from Database.table1`, function (err, rows, fields) {
let numbers = [];
for (var item of rows) {
numbers.push(item.number);
}
connection.query(`DELETE from Database.table2 where numbers IN ("+numbers+")`, function (err, rows, fields) {
connection.release();
console.log("delete successfull")
})
console.log("Step One finished !")
})