Mongoose不会在co中产生findeOne结果

时间:2016-06-14 20:55:47

标签: node.js mongoose promise ecmascript-6 co

我正在使用co和mongoose,我希望我的异步代码看起来更“同步” - 并且 - 据我所知 - co库允许我使用来自另一个产生的承诺的数据以避免回调地狱。它似乎与mongoose save一起工作(即使我做了多次保存),但它对从find()或findOne()等查询返回的promise没有任何作用。这是为什么?我该怎么做才能解决它?

这是我的一段代码:

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

1 个答案:

答案 0 :(得分: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);
});