【发布时间】:2016-06-22 15:14:26
【问题描述】:
3 月 9 日更新
我使用内置的 ES6 Promise,它可以工作:
mongoose.Promise = Promise;
既然我确定mongoose的版本是4.4.6,那么原来mongoose的promise(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"。
【问题讨论】:
-
promise.then 不见了。
-
@morels: mongoose promises 懒惰吗?
-
@morels 仍然不起作用。请查看更新后的代码 sn-p。
-
你期待什么?您的路由处理程序会创建一个带有承诺的变量,该承诺会在 4 秒后解决。它不会在任何地方调用
res,因此它永远不会向浏览器发送任何内容。 -
@Tomalak 最初我想找到一些使用猫鼬的文档,但后来我发现有些语句从未被调用,这让我感到困惑。我用简单的 setTimeout 替换了这些代码,并意识到问题出在 mongoose promises 上。
标签: javascript node.js mongoose promise