Dan*_*ham 9 mongoose mongodb node.js promise
我有一个mongoose架构,我正在调用Model.create().
当我在'then'之后链接'catch'时我得到undefined不是一个函数,如果我只是将错误函数作为'then'的第二个参数调用,那么我没有.
但是当我调用Model.find之类的方法时,我可以使用'catch'.
为什么我不能在调用Model.create时链接'catch'
var mySchema = Mongoose.Schema({
name: String,
});
Run Code Online (Sandbox Code Playgroud)
作品:
KarmaModel.create({
"name": "ss,
})
.then(function() {
//do somthing
},function()=>{
//do somthing
});
Run Code Online (Sandbox Code Playgroud)
不起作用:
KarmaModel.create({
"name": "ss,
})
.then(function() {
//do somthing
}).catch(function()=>{
//do somthing
});
Run Code Online (Sandbox Code Playgroud)
jbd*_*nte 11
如http://mongoosejs.com/docs/promises.html上所述
Mongoose 4.1.0中的新功能虽然mpromise足以满足基本用例,但高级用户可能希望插入他们喜欢的ES6风格的承诺库,如bluebird,或者只使用本机ES6承诺.只需将mongoose.Promise设置为您最喜爱的ES6风格的promise构造函数,mongoose就会使用它.
你可以设置mongoose使用bluebird:
require("mongoose").Promise = require("bluebird");
Run Code Online (Sandbox Code Playgroud)
重复之后,看起来它.catch实际上并不是Promises/A +规范的一部分.大多数图书馆似乎只是将它作为语法糖来实现.该MPromise库是猫鼬的承诺库,它看起来像它遵循该规范的最低限度要求.您可以尝试使用另一个promise库来包装Mongoose承诺,但是它可能更容易吸收它并坚持使用标准.then(success, error)处理程序.
如果你想包装它们,你可以这样做:
var Promise = require('bluebird');
Promise.resolve(KarmaModel.create({ "name": "ss" })
.then(function() {
// do something
})
.catch(function() {
// do something
});
Run Code Online (Sandbox Code Playgroud)
Bluebird是我最喜欢的实现,但几乎任何流行的promise库都有这种能力.
| 归档时间: |
|
| 查看次数: |
7228 次 |
| 最近记录: |