1

javascript に散在する WEBSql からデータを設定および取得するメソッドがあります。jayData を使用してデータをフェッチする「get」関数を次に示します。

function getProductRow(key){

    console.debug("Product key.. " + key);

    $data("Product")
        .query("it.Key == productKey", { productKey: key})
        .then(function(items) {
            items.forEach(function(item) {
               console.debug("item.value.. " + item.Value);
               return item.Value;
            });
         });    
}

そして、さまざまな場所から呼び出され、メソッドを呼び出す js メソッドを次に示しますgetProductRow

function getProdValue(key) {
    console.debug("called getProdValue with " + key);

    var value = getProdRow(key);
    var prod = $.parseJSON(value);          
    // do stuff with prod       

}

コンソールに表示されるログは次のとおりです。

called getProdValue with abc111
Product key.. abc111
Uncaught SyntaxError: Unexpected token u
item.value.. // some stringified valid json string

明らかに、jaydata の非同期の性質により、コントロールはitem.Value取得される前に呼び出し元の関数に返され、「未定義」を解析すると構文エラーが発生します。が返されたときにのみ制御が呼び出し元の関数に戻るように、呼び出し全体を同期させるにはどうすればよいitem.Valueですか?

4

1 に答える 1

1

同期させることはできません。あなたのコードから、あなたは主キーで読んでいると思うので、次のようなものが必要になります:

function getProdValue(key) {
       $data("Product").read(key)
       .then(function(product) {
            return $.parseJSON(product.value);
        });
 }
于 2013-09-05T11:00:54.120 に答える