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

グローバル変数で、マングースの取得コールバックを設定する方法

    非同期性についての超古典的な初心者の間違い:)

    何が起こっているのか:

    var name; // FIRST you declare the name variable
    
    schema.findone({name : 'Bob'} , function(er , db){ // SECOND you launch a request to the DB
      name = db; // FOURTH name is populated.
      console.log(db);
    });
    
    console.log(name); // !! THIRD !! you log name - it's empty
    

    あなたがすべきこと:

    schema.findone({name : 'Bob'} , function(er , db){
      doSomethingElse(db);
    });
    
    function doSomethingElse(name){
        console.log(name); // It's defined.
    }
    

    悪い習慣なので、グローバル変数を宣言することすらしません。データが利用可能になったらすぐに、それを別の関数に渡して、それを使って何かをします。したがって、グローバルスコープを汚染することはありません。

    編集 :何らかの理由でグローバル変数が絶対に必要なので、これを実行します:

    var name;
    
    schema.findone({name : 'Bob'} , function(er , db){
      name = db;
      console.log(name); // works fine
      doSomethingElse();
    });
    
    console.log(name); // name is empty here, because the DB request is still in progress at this stage
    
    function doSomethingElse(){
        console.log(name); // Tadaaaa! It's a global variable and is defined!
    }
    



    1. mgoを使用したMongoDBでの効率的なページング

    2. PHPを使用したMongoDBアグリゲート-日付ごとにグループ化

    3. LogicException:PHPRedis拡張機能がインストールされ有効になっていることを確認してください

    4. EntityFrameworkとMongoDb