0

私は co と mongoose を使用していますが、非同期コードをもう少し「同期的に」見たいと思っています。私が読んだ限りでは、co ライブラリを使用すると、あるプロミスのデータを別のプロミスで使用して、コールバック地獄を回避できます。マングースの保存では機能するようですが (複数の保存を行っても)、find() や findOne() などのクエリから返されたプロミスでは何もしません。何故ですか?修正するにはどうすればよいですか?

ここに私のコードの一部があります:

co(function *() {
    let unhashedPassword = Math.random().toString(36);
    let passed = {
        username: 'T1',
        password: bcrypt.hashSync(unhashedPassword)
    };
    let saved = yield new test_model(passed).save();
    console.log("saved: " + saved);
    let found = yield test_model.findOne({username: saved.username}).exec();
    console.log("found" + found);
});

そして出力:

saved: { _id: 57606dcf0f2378d41c355acd,
  password: '...',
  username: 'T1',
  __v: 0 }
Process finished with exit code 0
4

1 に答える 1

1

これを試してみると何が見えますか?

co(function *() {
    let unhashedPassword = Math.random().toString(36);
    let passed = {
        username: 'T1',
        password: bcrypt.hashSync(unhashedPassword)
    };
    let saved = yield new test_model(passed).save();
    console.log('saved: ', saved);
    let foundPromise = test_model.findOne({username: saved.username}).exec()
    .then(function(value){
        console.log('fulfilled', value);
    }, function(error){
        console.log('error', error);
    });
    console.log('foundPromise', foundPromise);
    let found = yield foundPromise;
    console.log('found', found);
}).catch(function(error){
    console.log('catch', error);
});
于 2016-06-14T21:55:40.030 に答える