4

内部関数から値を取得しようとしています。ドメインが常に未定義を返すのはなぜですか?これは、webSQLが非同期で実行されるためだと思います。続行する前に、プログラムのこの時点でドメインの値を取得する必要があります。これは閉鎖の問題だと思いますが、おそらく私のアプローチは間違っていますか?

var domain = selectDomain();

function selectDomain()
{
    var sql,
        i;

    sql = "SELECT * FROM Domain";

    database.open();
    database.query(sql, [], function(tx, result) 
    {
        for (i = 0; i < result.rows.length; i++)
        {
            var domain = result.rows.item(i);   
            return domain.Domain;
        }
    });
}
4

1 に答える 1

3

クエリが非同期で実行されるのは正しいことであり、ここでのreturnステートメントは機能しません。代わりに、クエリのコールバック関数で、結果をパラメータとして渡す別の関数を呼び出し、そこからプログラムを続行します。

編集:結果をループすることに気づきました。つまり、domain各行によって継続的に上書きされ、常に最後の項目の値になります。

var domain;
selectDomain();

function selectDomain() {
  ...

  database.query(sql, [], function(tx, result) 
  {
    for (i = 0; i < result.rows.length; i++)
    {
      handleResult(result.rows.item(i));
    }
  });
}

function handleResult(result) {
    domain = result.Domain;
    // Continue
}
于 2012-04-12T11:33:02.647 に答える