我不明白我的代码执行的顺序

时间:2019-07-15 18:19:18

标签: node.js mongodb express mongoose event-loop

在给定的代码中,首先执行.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);
});

1 个答案:

答案 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

我希望这会有所帮助。