【发布时间】:2016-10-15 18:30:00
【问题描述】:
我正在使用 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
【问题讨论】:
-
如果你只输入
console.log("found");会怎样?它达到那个地步了吗?看起来很奇怪,你甚至都看不到console.log的输出 -
尝试捕捉错误like here。我很确定你有一个例外。
-
@WillemD'Haeseleer,我是在提交 test_model.findOne() 之后完成的,但它没有被打印出来——它没有达到那个程度。
-
@Bergi - 在 co 之后添加了 catch,甚至通过 try/catch 包围了 findOne,但仍然没有...
标签: node.js mongoose promise ecmascript-6 co