2012-02-14 9 views
2

私はLawnchairを使用してjsにデータを保存し、モバイルアプリ用に回収しています。ローンチェアのjavascriptデータ "get"で別の変数に割り当てることはできません

これは私のjsファイルにあります。

$(document).ready(function() { 

    //Lawchair set up 
    db = Lawnchair({name: 'db'},function(e){ 
     console.log('storage open'); 
    }); 

    //store the 'username' key in storage 
    db.save({key:"username", value: "john"}); 

    var name = "" 
    db.get("username", function(obj){ 
      name = obj.value; 
    }) 

    alert(name); 

}); 

問題は、私はいつも名前に「」を取得です。私はLawnchairオブジェクトから "get"のコールバック関数内に変数を設定することはできません。何か不足していますか?

ご協力いただければ幸いです。

ありがとうございました。

答えて

3

データベース操作は非同期です。あなたの警告をの中に ".get()"関数へのコールバックを入れてください。

は原則、任意の時間として、あなたは、このようなJavaScriptのAPIを参照してください。

something(param, param, ... , function(result, result, ...) { 
    // ... 
}); 

それは機能が非同期機構であってもよい良い賭けだ、とあなたが提供するコールバック関数のみが呼び出されること後でイベントが実際に発生する。そのような場合は、操作が完了した後に実行する必要があるアクティビティがコード内でコールバック内で実行されるように、独自のコードを構造化する必要があります。

(それは必ずしもそうではありません。例えば、いくつかの機能のプログラミングAPIは引数として関数を取る。)

+0

あなたはそれが「非同期」であることについて正しいです。しかし、ストレージから何らかのデータにアクセスする必要があるたびに、コードをコールバックに入れておくのは辛いプロセスです。私は今、変数が非同期操作の後に設定されるまで、jsでどのように待つことができるかを調べています。理想的でないかもしれない。しかし、私はまだgetData( "somekey")メソッドを作成する必要があります。ありがとう。 –

+0

一般に、クライアント側のJavaScriptで「待機」する方法はありません。 – Pointy

+0

コールバックを経由するだけです。 :) thatsの芝生の椅子は動作します。 – ghostCoder

関連する問題