无法获取蓝鸟许诺和mongoose的save()在node.js中工作
任何人都可以帮助我弄清楚如何在承诺中重写以下工作代码? 我想执行一个插入查询,然后通过socket.js将数据发送回客户端
var func = require("functions") var mongoose = require('mongoose'); var mongo_models = require('./database/mongo_model')(mongoose); var Promise = require("bluebird"); socket.on("submit",function(d){ if(d[0].src !== undefined) { var data = func.clear(sanitizer,d), tab = new mongo_models.Tab({avg:0,post:data}); tab.save(function(err,tw){ io.sockets.in('index').emit("update",tw) }) } });
我已经尝试了下面的代码,但我从console.log(b)
得到undefined
。 显然save()
没有返回任何结果。 诺言:
socket.on("submit",function(d){ if(d[0].src !== undefined) { Promise.props({ one: func.clear(sanitizer,d) }).then(function(a){ return new mongo_models.Tab({avg:0,post:a.one}).save(); }).then(function(b){ console.log(b); // undefined io.sockets.in('index').emit("update",b) }).catch(function (error) { console.log(error); }) } });
在Mongoose中保存是有问题的,因为那里的promise函数返回规则的例外。
我强烈build议你使用暴露saveAsync
函数的bluebird promisifymongoose:
var Promise = require("bluebird"); var func = require("functions") var mongoose = Promise.promisifyAll(require('mongoose')); var mongo_models = require('./database/mongo_model')(mongoose);
然后返回asynchronous调用:
// Note the suffix return new mongo_models.Tab({avg:0,post:a.one}).saveAsync();