node.js - Mongoose 连接 Promise 回调
问题描述
在测试Promise.then(...)
方法中提供的回调(延续)的执行时mongoose.connect(...)
,我发现这显然没有按照 Promise 的预期安排在微任务队列上。这是我的代码:
var mongoose = require('mongoose');
function sleep(time) {
const now = Date.now();
while(now + time > Date.now()) {}
}
console.log('START');
mongoose.connect('mongodb://localhost/playground')
.then(result => {
console.log('Connected to MongoDB');
});
setTimeout(() => {
console.log("setTimeout() - callback queue");
}, 0);
Promise.resolve("A").then(result => {
sleep(1000);
console.log("1. Resolved Promise:", result);
});
Promise.resolve("B").then(result => {
sleep(1000);
console.log("2. Resolved Promise:", result);
});
console.log('END');
使用 Nodejs(版本 16.9.1)运行上述代码后,我得到以下输出:
START
END
1. Resolved Promise: A
2. Resolved Promise: B
setTimeout() -
连接到 MongoDB 的回调队列
当mongoose.connect(..)
返回一个 Promise 时,它的回调(继续):
console.log('Connected to MongoDB');
是否也应该被安排在微任务队列上,因此在setTimeout()
被安排在较低优先级回调(任务)队列上的回调之前执行?
我正在使用猫鼬 6.0.12
谢谢
解决方案
推荐阅读
- reporting-services - 如何在 ssrs 报告服务中获得平均工作日平均周六和平均周日的正确结果?
- ruby-on-rails - 如何在 Rails 中的模型对象响应中添加额外属性
- c++ - 读取文件内容时 M_construct 错误
- django - 在 Django 模型的 __str__ 方法中引用 ManyToManyField
- r - 重叠标签的问题 (geom_text)
- java - 流式传输存储在数据库中的 json 数据
- reactjs - JSX 从何而来?
- python - 我是否必须从 abc.ABC 继承才能使用 @abstractmethod 装饰器?
- java - 程序运行时数据库出错但编译完美
- xamarin.ios - 从 Xamarin.iOS 中的抽象类型类创建对象