首页 > 解决方案 > 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

谢谢

标签: node.jsmongodbmongoosepromisecallback

解决方案


推荐阅读