我无法理解我的代码执行的顺序
i can't understand the order in which my code is executing
在给定的代码中,首先执行 .find() 方法,然后执行 .create() 方法,但是在代码中它们的定义相反,您可以 see.I 知道这与事件循环有关但是我无法理解我的代码的概念视图,所以请逐步解释。
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);
});
要了解为什么会出现这种行为,您需要了解异步代码。 Nodejs 会读取你的指令,然后就完成了。当 find
方法完成时,它调用定义的回调。想象一下查找操作非常复杂,那么您的创建函数回调将首先执行。 (但查找操作将同时执行)。要了解这一点,我可以推荐以下视频。煮点咖啡,收听 :)
What the heck is the event loop anyway? | Philip Roberts | JSConf EU
今天大多数 Nodejs 程序员使用 Promises 来处理异步代码,您可以在这里了解:
Promises - Part 8 of Functional Programming in JavaScript
Async JS Crash Course - Callbacks, Promises, Async Await
希望对您有所帮助。
在给定的代码中,首先执行 .find() 方法,然后执行 .create() 方法,但是在代码中它们的定义相反,您可以 see.I 知道这与事件循环有关但是我无法理解我的代码的概念视图,所以请逐步解释。
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);
});
要了解为什么会出现这种行为,您需要了解异步代码。 Nodejs 会读取你的指令,然后就完成了。当 find
方法完成时,它调用定义的回调。想象一下查找操作非常复杂,那么您的创建函数回调将首先执行。 (但查找操作将同时执行)。要了解这一点,我可以推荐以下视频。煮点咖啡,收听 :)
What the heck is the event loop anyway? | Philip Roberts | JSConf EU
今天大多数 Nodejs 程序员使用 Promises 来处理异步代码,您可以在这里了解:
Promises - Part 8 of Functional Programming in JavaScript
Async JS Crash Course - Callbacks, Promises, Async Await
希望对您有所帮助。