2011-11-10 8 views
0

ちょっと私はHTML5データベースAPIを使いこなしていましたが、関数から結果を返すのに問題があります。ここに私が持っているものがあります。JavascriptデータベースAPIの返品結果

var list = GetScenarios(); 

GetScenarios: function() 
{ 

var scenarios; 

// get all the scenarios 
conn.transaction(function(_t) { 

_t.executeSql('SELECT * FROM scenarios', [], function(_tr, _result) { 

     scenarios = _result.rows; 

    }); 
}); 

return scenarios; 

} 

私はdbから行を取得できますが、行は変数シナリオに割り当てられません。スコープのことは分かっていますが、GetScenatios関数の結果を返す方法は考えられません。

私は_result.rowsをログに記録するときにデータがありますが、シナリオは常に定義されていません。

どのような考えですか?

ここに私のjsファイルがどのように設定されているかを示します。

window.MyExtension = (function() 
{ 

    return ({ 

    OtherMethod: function() { 


     var list = window.MyExtension.GetScenarios(); 

    }, 

    GetScenarios: function() { 

     ...see above 

    } 

}()); 
+0

:この、へ

var list = GetScenarios(); // do something with list 

function GetScenarios(callback) { conn.transaction(function(_t) { _t.executeSql('...', [], function(_tr, _result) { callback(_result.rows); }); }); } 

から、あなたの呼び出し元のコードを変更:あなたはGetScenarios()にコールバックパラメータを追加する必要があります。 'GetScenarios:function()'は 'function GetScenarios()'でなければなりません。 'GetScenarios = function()'でも構いませんが、 'var list = GetScenarios();'の前に現れなければなりません。 – gilly3

+0

@ gilly3、正しい、最後の発言を除いて:http://jsfiddle.net/FvdbT/ – stivlo

+0

@stivlo - おそらくあなたは私のコメントを誤解しました。あなたのjsFiddleによって証明された '関数GetScenarios()'が動作します。しかし、次のように 'GetScenarios = function()'はそうではありません。http://jsfiddle.net/FvdbT/1/ – gilly3

答えて

1

あなたはそれが同期であるかのように非同期要求からコードを返すようにしようとしているように見えます。あなたのコードは無効JavaScriptのである

GetScenarios(function (list) { 
    // do something with list 
}); 
+0

Perfecto!どうもありがとうございます。また、私はオブジェクト内からwindow.MyExtension.GetScenario()を使用する必要があります。ありがとうヒープ – hooligan

関連する問題