等待for循环中的当前循环完成,然后继续

时间:2018-04-05 11:58:44

标签: javascript

让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循环在开始新循环之前等待当前循环完成?

1 个答案:

答案 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;