在猫鼬中创建承诺时,不会调用执行器
Executor doesn't get called when a Promise is created in Mongoose
3月9日更新
我使用内置的 ES6 承诺,它可以工作:
mongoose.Promise = Promise;
由于我确定猫鼬的版本是 4.4.6,事实证明猫鼬承诺(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": "^4.4.4"
.
猫鼬
的承诺和内置Promise
之间的区别在于,ES6 的不是猫鼬的,而是可更新的。
猫鼬文档引用了"thenability"功能,但没有提到任何解析/拒绝过程(无论是 promiseaplus 的文档),所以你的代码中预计不会发生任何事情。
如下所示的解决方案应该可以完成您的任务:
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;
相关文章:
- 通过ajax从客户端调用C#方法来执行C#方法
- ajax调用获胜't同步执行
- 使用Node中的Q promise库对值数组顺序调用/执行相同的函数;并返回带有结果的新数组/集合
- 如何在异步调用执行之前阻止执行
- 表单提交成功后调用/执行JQuery函数
- ng 类指令调用执行两次
- 在猫鼬中创建承诺时,不会调用执行器
- 资源查询调用执行计时
- 是使用每个方法调用执行的对象函数
- 是否可以在ioredis中使用单个.sadd/.zadd调用执行多个SADD或ZADD分配
- 对函数调用执行双击功能
- nodejs中的函数调用执行
- 使用AJAX调用执行Javascript
- 使用javascript ajax调用执行PHP脚本
- 通过ajax调用执行动态javascript
- 是否可以通过AJAX调用执行后台PHP服务器任务,该任务不会锁定您的网站
- 停止从外部文件调用执行代码
- JavaScript匿名函数立即调用/执行(表达式与声明)
- JQuery.Load()是否将标记呈现和Java脚本作为单个阻塞调用执行
- 对每个调用执行JavaScript属性计算