2016-06-14 83 views
0

我使用co和貓鼬,我希望我的異步代碼看起來更「同步」 - 據我所知 - co庫允許我使用來自一個在另一個方面承諾避免回調地獄。它似乎與mongoose保存(即使我做了多次保存)一起工作,但它對find()或findOne()等查詢返回的promise沒有任何作用。這是爲什麼?我能做些什麼來解決它?Mongoose不會產生findeOne結果co

Here'a一塊我的代碼:

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 
+0

如果你只是把'console.log(「found」);'?它是否達到了這一點?似乎很奇怪,你甚至不會看到'console.log'的輸出。 –

+0

嘗試捕捉錯誤[像這裏](http://stackoverflow.com/a/32215520/1048572)。我很確定你有一個例外。 – Bergi

+0

@ WillemD'Haeseleer,我是在yieling test_model.findOne()後做的,它沒有打印 - 它沒有達到那一點。 –

回答

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); 
}); 
+0

我刪除了最後的收益率(讓我們發現=收益foundPromise收益率): 保存:{_id:57607fcf7cfca7980d37bc12, password:' $ 2A $ 10 $ Ebk6vFc5iai7yt7wTnT16e.0fOxEyvUE0jUqemYho44MfLUiACI0u」, 用戶名: 'T1', __v:0} foundPromise無極{ 發射極: EventEmitter { 域:空, _events:{拒絕:[功能]}, _eventsCount: 1, _maxListeners:undefined}, 發射:{}, 已結束:true} 過程用exit c結束頌歌0 –

相關問題