【问题标题】:Executor doesn't get called when a Promise is created in Mongoose在 Mongoose 中创建 Promise 时不会调用 Executor
【发布时间】: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


【解决方案1】:

mongoose 的 promise 和内置 Promise 的区别在于 ES6 的 promise 是新的而不是 mongoose 的

Mongoose 文档引用了“thenability”功能,但没有提及任何解决/拒绝过程(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;

【讨论】:

  • 非常感谢您的解释:D
猜你喜欢
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 2019-06-18
  • 2021-06-12
  • 2020-02-14
  • 2016-05-08
  • 2020-07-22
  • 2018-04-03
相关资源
最近更新 更多