在Mongoose

时间:2016-03-08 15:26:53

标签: javascript node.js mongoose promise

于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"

1 个答案:

答案 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;