在给定的代码中,首先执行.find()方法,然后执行.create()方法,但是在代码中它们的定义相反,正如我所见,我知道这与事件循环有关,但是我可以无法理解我的代码的概念性观点,因此,请逐步解释。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/cat_app', {useNewUrlParser: true});
const catSchema = new mongoose.Schema({
name: String,
age: Number,
temperament: String
});
const Cat = mongoose.model("Cat", catSchema);
Cat.create({name: "uleru", age: 7, temperament: "jarigon"}, (err, cats) =>
{
if(err) console.log(err);
else console.log("cat has been added to database" + cats);
});
Cat.find({}, function (err, cats) {
if (err) return console.error(err);
console.log(cats);
});
答案 0 :(得分:1)
要了解为什么会看到此行为,您需要了解异步代码。 Nodejs将阅读您的说明,然后完成。当find
方法完成后,它将调用已定义的回调。假设find操作非常复杂,那么您的create函数回调将首先执行。 (但是find操作将同时执行)。要了解这一点,我可以推荐以下视频。喝点咖啡,然后调入:)
What the heck is the event loop anyway? | Philip Roberts | JSConf EU
当今大多数Node.js程序员都使用Promises来处理异步代码,您可以在此处了解以下内容:
Promises - Part 8 of Functional Programming in JavaScript
Async JS Crash Course - Callbacks, Promises, Async Await
我希望这会有所帮助。