0
votes

Nodejs Comment décider quelle fonction est exécutée en premier?

J'apprends à intégrer Sequalize forte> dans NodeJs strong>. J'ai écrit deux questions. Le premier crée une entrée de produit dans la base de données et l'autre récupère toutes les entrées de la table de base de données. J'ai placé la requête Créer une requête avant la requête Récupérer, mais la requête de récupération donne un résultat avant que la requête créée ne soit exécutée.

Quelqu'un peut-il expliquer ce que je fais mal et comment l'empêcher? J'ai collé le code et le résultat ci-dessous. P>

Voici les scripts: p> xxx pré>

Il s'agit de la sortie de l'exécution: p>

[nodemon] starting `node app.js`
body-parser deprecated undefined extended: provide extended option app.js:10:20
Executing (default): SELECT `id`, `title`, `imageUrl`, `description`, `createdAt`, `updatedAt` FROM `products`
AS `product`;
Executing (default): CREATE TABLE IF NOT EXISTS `products` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255), `imageUrl` VARCHAR(255) NOT NULL, `description` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): INSERT INTO `products` (`id`,`title`,`imageUrl`,`description`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?,?,?,?);
Reached find all
All users: [
    {
        "id": 1,
        "title": "Dhruv",
        "imageUrl": "asdasdwadasd",
        "description": "How u doin",
        "createdAt": "2019-06-05T17:39:43.000Z",
        "updatedAt": "2019-06-05T17:39:43.000Z"
    },
    {
        "id": 2,
        "title": "Dhruv",
        "imageUrl": "asdasdwadasd",
        "description": "How u doin",
        "createdAt": "2019-06-05T17:44:24.000Z",
        "updatedAt": "2019-06-05T17:44:24.000Z"
    },
    {
        "id": 3,
        "title": "Dhruv",
        "imageUrl": "asdasdwadasd",
        "description": "How u doin",
        "createdAt": "2019-06-05T17:44:34.000Z",
        "updatedAt": "2019-06-05T17:44:34.000Z"
    }
]
Executing (default): SHOW INDEX FROM `products`
Success
Product Created


0 commentaires

4 Réponses :


0
votes

Comme nœud.js est de nature asynchrone, Le flux d'exécution normal ne fonctionnera pas .

Vous pouvez atteindre l'usecase ci-dessus, en utilisant promesses ou rappels .

Celles-ci vous aideront à contrôler le flux, c'est-à-dire exécuter la deuxième fonction, uniquement après la première exécution complète.


0 commentaires

0
votes

Gardez simplement la FindProduCuduct () forte> Fonction dans le corps d'AL (Strong> AddProduCit Strong>.
Les autres voies sont également d'abord essayer cela et répondez.

   const addProduct = (req,res,next)=>{
        product.create({
        title:"Dhruv",
        imageUrl: "asdasdwadasd",
        description : 'How u doin'
    }).then(function(user){
        console.log("Product Created");
        findProduct();
    }).catch(function(err){
        console.log("cant create");
    });
    }
    addProduct();
    const findProduct = (req,res,next)=>{
        product.findAll().then(users => {
        console.log("Reached find all");
        console.log("All users:", JSON.stringify(users, null, 4));
    });
    }


1 commentaires

Je sais que cela fonctionnera, mais c'est une solution temporaire. Je veux connaître la bonne façon de faire ça. Je fais un site Web, il y aura beaucoup d'appels de fonction, je ne peux pas continuer à ajouter des appels de fonction à l'intérieur des fonctions.



0
votes

Vos requêtes sont des fonctions asynchrones. Si la requête de recherche retourne avant que la création ne soit simplement parce que sa traitée rapidement. Si vous voulez être sûr que le second est exécuté après la fin du premier, vous devez l'appeler à l'intérieur de l'ajout de rappel. Par exemple: xxx


0 commentaires

0
votes

C'est une autre façon de faire. xxx


5 commentaires

Ceci est promess basé. N'utilisez pas promess mot-clé BecoZ Sequelize est basé sur la promesse interne


Vous écrivez une fonction dans une fonction. Ce n'est pas un moyen efficace de le faire.


Je fais selon votre architecture du code et c'est efficace. Il est promesse pas seulement une fonction, homme


J'ai étudié un peu plus. Votre solution fonctionne. De plus, nous pouvons utiliser un délai d'attente, mais sa même chose. Une autre méthode que j'ai aimé est asynchraement et attend. Quoi qu'il en soit, merci beaucoup.


ASYNC Await est une autre manière de faire la promesse.