让javascript的当前迭代在下一个迭代之前完成的最佳方法是什么?
继承我的问题。
目前,我正在为一个for循环中的每个项目从SQLite数据库运行一个SQL select语句,就像这样。
for(let i = 0; i < myresult.length; i++){
var query = "SELECT * FROM table WHERE id = " + myresult[i].id;
var result = //Run sql here
if(result.length == 0){ // if result doesn't exist, make it.
var insertQuery = "INSERT INTO table";
}
}
我的问题是,当它在循环中运行时,它会在select完成之前开始运行insert语句。
例如
//循环的第一次迭代
“SELECT * FROM table WHERE id = 1”;
“INSERT INTO table(id)VALUES(1)”;
//循环的第二次迭代
“SELECT * FROM table WHERE id = 2”;
“INSERT INTO table(id)VALUES(1)”;
这样做是因为它没有等待for循环的当前迭代完成,然后才开始下一个。
如何让for循环在开始新循环之前等待当前循环完成?
答案 0 :(得分:-1)
如果您在ms-sql中使用存储过程并使用ajax / angular在Javascript上使用JSON绑定数据,那将会更好。
DECLARE @TEMPTABLE TABLE (
field1 BIGINT, -- ID
field2 NVARCHAR(100),
field3 NVARCHAR(150),
field4 NVARCHAR(150)
);
INSERT @tempTable (
field1,
field2,
field3,
field4
)
SELECT t.field1,
t.field2,
t.field3,
t.field4
FROM table1 t
DECLARE @CountTable INT = (
SELECT Count(*)
FROM @tempTable t
);
IF(@CountTable&lt; = 0)
BEGIN
SELECT'NO RECORD FOUND'作为[STATUS];
RETURN;
END;
DECLARE @count INT;
SET @count = 1;
WHILE(@ count&lt; = @CountTable)
BEGIN
DECLARE @ Field1 NVARCHAR(100)='',
@Field2 NVARCHAR(150) = '',
@Field3 NVARCHAR(150) = '',
@Field4 NVARCHAR(150) = '',
选择前1名
@Field1 = t.field1,
@Field2 = t.field2,
@Field3 = t.field3,
@Field4 = t.field4
FROM @tempTable t;
删除@tempTable
WHERE field1 = @ Field1; - ID
SET @count = @count + 1; END;