于3月9日更新
我使用内置的ES6 Promise并且它可以工作:
mongoose.Promise = Promise;
由于我确信mongoose的版本是4.4.6,但事实证明mongoose promises(mpromise)有些不对劲。真的很奇怪。
我在jsbin中试过,它表明在构造Promise对象之前会调用传递给Promise构造函数的函数,但是当在Mongoose中使用Promise时,函数不会被调用。
测试代码在这里:
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Promise = mongoose.Promise;
// Test
router.post('/promise', function (req, res, next) {
var promise = new Promise(function (re, rej) {
console.log('start');
setTimeout(function () {
console.log('stop');
re('RESULT');
}, 4000);
});
promise.then(function (result) {
console.log(result);
});
});
module.exports = router;
控制台中没有打印任何内容。
Mongoose版本为"mongoose": "^4.4.4"
。
答案 0 :(得分:0)
mongoose的承诺与内置Promise
之间的区别在于 ES6的承诺是新的而不是猫鼬。
Mongoose文档引用了"可靠性"功能但未提及任何解决/拒绝程序(promiseaplus' docu),因此您的代码中不会发生任何事情。
如下所示的解决方案应该可以完成您的任务:
var router = require('express').Router();
var mongoose = require('mongoose');
// Test
router.post('/promise', function (req, res, next) {
var es6_promise = new Promise(function (resolve, reject) {
console.log('start');
setTimeout(function() {
console.log('stop');
resolve('RESULT');
}, 4000);
});
es6_promise.then(function (result) {
console.log(result);
});
});
module.exports = router;