2014-04-21 1 views
0

내가 선택한 쿼리에 대한 입력으로 동적 배열을 반복하려고합니다. 모든 배열 요소에 대해 select 쿼리가 실행되지 않습니다. for 루프에서 select 쿼리를 작성했습니다. 문제는 루프가 먼저 실행되고 select 쿼리가 배열의 마지막 요소에만 수행됩니다. 이것은 비동기 함수로 인한 것일 수 있습니다. 나는이 문제를 해결할 수있는 방법은 다음과 같이 내 코드sqlite에서 select 쿼리를 반복 할 때 문제가 발생합니까?

function sendCategoryDetailsNew(myLocation) 
{ 
    var myLocationcoordinates = new Array(); 
    var db = window.sqlitePlugin.openDatabase({name: "MYDB"}); 
    for (var i = 0; i < myLocation.length; i++) 
    { 
    var locationName = myLocation[i]; 
    alert(locationName); 
    db.transaction(function (tx) { 
    tx.executeSql("select Coordinates from Locationlog WHERE Location = '"+locationName+"';", [], function (tx, res) 
    { 
    for (var i = 0; i < res.rows.length; i++) 
    { 
     alert("Location : "+locationName+ " Latlongs :"+ res.rows.item(i).Coordinates); 
     myLocationcoordinates[i] = res.rows.item(i).Coordinates; 
    } 
    }); 
}); 
} 
} 

어떤 제안,

답변

0

코드를 단순화 시도이다. 문제는 같은 반복기 이름을 가진 for 안에 for을 가지고 있다고 생각합니다.

function sendCategoryDetailsNew(myLocation) 
{ 
    var myLocationcoordinates = new Array(); 
    var db = window.sqlitePlugin.openDatabase({name: "MYDB"}); 
    var locationsList = "\'" + myLocation.join("\',\'") + "\'"; 
    db.transaction(function (tx) { 
     tx.executeSql("SELECT Location, Coordinates FROM Locationlog WHERE Location IN (?)", locationsList, function(tx, res) { 
      for (var i = 0; i < res.rows.length; i++) 
      { 
       console.log("Location : " + res.rows.item(i).Location + " Latlongs : " + res.rows.item(i).Coordinates); 
       myLocationcoordinates[i] = res.rows.item(i).Coordinates; 
      } 
     }); 
    } 
} 

대신 값의 두 세트를 통해 반복, 내가 IN SQL 문에 사용할 수있는 문자열로 myLocation 배열을 컴파일 : 여기

내가 이것을 시도하는 방법의 예입니다. 그러면 myLocation 배열의 모든 결과가 반환되고 처리를 위해 반복됩니다.

이렇게하면 처리량이 많이 줄어들고 함수에 실패 지점이 적게 생성됩니다.

+0

알려 드리겠습니다. :) – Vinod

+0

경고를받지 못했습니다. 쿼리를 변경해야합니까? 어떻게 문자열이 반복 될 것인가? – Vinod

+0

답변이 업데이트되었습니다. 하나 이상의 결과가있을 것이라고 가정하고 경고하지 말고'console.log'로 변경하십시오. 또한 이전에 반복 작업을했기 때문에 하나 이상의 위치가 전달되었다고 가정합니다.이 코드는 정보 목록을 기반으로 레코드를 찾는 데 사용되는 IN 문에 사용할 문자열을 만듭니다 . –

관련 문제