无法获取蓝鸟许诺和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();