2016-08-11 11 views
0

私はPromisesメソッドのチュートリアルをオンラインで読みましたが、まだ少し混乱しています。 私はdbに接続することを含むいくつかの機能を実行するノードapp.jsを持っています。関数が終了するのを待つという約束を使う

db.connect(function(err) { 
    setupServer(); 
    if(err) { 
     logger.raiseAlarmFatal(logger.alarmId.INIT,null,'An error occurred while connecting to db.', err); 
     return; 
     } 

今、私はこのアプリケーションをカプセル化し、いくつかの要求呼び出しを実行するmochaユニットテストスイートを作成しました。場合によっては、テストがdbが正常に接続されたことの確認なしに、すなわちsetupServer()が実行された状態で初期化されることがある。

私はpromitsメソッドをこのビットの非同期コードにどのように実装すればよいでしょうか?約束されていなければ何を使うべきですか?私は既にイベントエミッターを試しましたが、これは依然としてすべての要件を満たしておらず、クリーンアップ中に失敗を引き起こします。

+1

setupServerの内側にあるもの?そこに非同期作業がありますか? – Ozan

+0

db – shanwar

+0

にキースペースを設定するための取得/ポスト/プロビジョニングの呼び出しが含まれている場合は、setupServer関数内でプロミスを設定する必要があります。 – Ozan

答えて

0

あなたはモカを使用している場合は、asynchronous code approachを使用する必要があります。この方法で、あなたはmochaに、doneが機能する前に機能するまで待つように指示することができます。

これはあなたが始めるでしょう:

describe('my test', function() { 
    before(function(done) { 
    db.connect(function(err) { 
     setupServer(done); 
    }); 
    }) 

    it('should do some testing', function() { 
    // This test is run AFTER 'before' function has finished 
    // i.e. after setupServer has called done function 
    }); 
}); 

は、それが終了したとき、あなたのsetupServerdone関数を呼び出すと仮定:

function setupServer(done) { 
    // do what I need to do 
    done(); 
} 
0

asyncの機能を持つ本体の内部にPromiseを使用する必要があります。あなたのケースでは、私はあなたが言ったsetupServer()だと思います。さらに読書のために

conts setupServer =() => { 
    return new Promise((resolve, reject) => { 
    //async work 
    //get requests and post requests 
    if (true) 
     resolve(result); //call this when you are sure all work including async has been successfully completed. 
    else 
     reject(error); //call this when there has been an error 
    }); 
} 


setupServer().then(result => { 
    //... 
    //this will run when promise is resolved 
}, error => { 
    //... 
    //this will run when promise is rejected 
}); 

関連する問題