sql >> データベース >  >> NoSQL >> MongoDB

このMongoDB/Node非同期の問題を回避するにはどうすればよいですか?

    一部の言語は、この問題に対処するための特別な言語構造を提供します。たとえば、C#にはasyncがあります / await 同期APIを呼び出しているかのようにコードを記述できるキーワード。

    JavaScriptはそうではなく、createAccountをチェーンする必要があります コールバックを使用した呼び出し。

    このコードを整理するのに役立つライブラリを開発した人もいます。例: async ステップ node-promise および Q

    ファイバー を使用することもできます ライブラリ、ファイバー/コルーチンを使用してJavaScriptランタイムを拡張するネイティブライブラリ。

    また、asyncに似た構造で言語を拡張した人もいます。 / await streamline.js IcedCoffeeScript または wind.js 。たとえば、streamline.js(私は作成者なので、明らかに偏見があります)は_を使用します 特別なコールバックプレースホルダーとして、例を次のように記述できます:

    var db = MongoClient.connect("mongodb://localhost:27017/bq", _):
    var accounts = db.createCollection('accounts', _);
    createAccount("bob","bob", _);
    createAccount("bob","bob", _);
    createAccount("bob","bob", _);
    createAccount("bob","bob", _);
    
    function createAccount(email, password, _) {
        var item = accounts.findOne({"email":email}, _);
        if (item === null) {
            accounts.insert({"email":email, "password":password}, _);
            console.log("Account " + email + " created."); }
        } else {
            console.log("Account already exists.")
        }
    }
    

    そして、最後になりましたが、ジェネレーター などの新しい言語機能 および遅延関数 JavaScriptの将来のバージョンについて議論されています(ジェネレーターはES6に到達する可能性が非常に高く、遅延関数は少し行き詰まっているようです)。

    したがって、多くのオプションがあります:

    • コールバックに固執する
    • ヘルパーライブラリを使用する
    • ファイバーランタイム拡張機能を使用する
    • 言語拡張機能を使用する
    • ES6を待つ


    1. MongoDBは未定義とnullを区別します

    2. MongoDbの現在のタイムスタンプとしてデフォルト値を使用して日付フィールドを作成するにはどうすればよいですか?

    3. MongoKitでカーソルを閉じる方法

    4. 遅延レプリカによるMongoDBバランサーのタイムアウト