Difference on Mongoose using Promise or Async/Await?










1















Using ExpressJs (as Web framework for Node.js) and Mongoose (for modeling MongoDB) to create a web service. I had a question about the best approach to handle the return object from some mongoose methods as (save, find, findByIdAndDelete, etc).



As the mongoose documentation says, the Model.prototype.save() will returns «Promise,undefined» Returns undefined if used with callback or a Promise otherwise.
For more: https://mongoosejs.com/docs/api.html#model_Model-save



So i want to know which one should we use or on which case one is better that the other?



As example using ES7 Async/Await:



const mongoose = require('mongoose');
const Person = mongoose.model('person');

module.exports.savePerson = async (req,res) =>
await new Person( ...req.body )
.save( (err, doc)=>
err ? res.status(400).json(err) : res.send(doc);
);



As example using ES6 Promise:



const mongoose = require('mongoose');
const Person = mongoose.model('person');

module.exports.savePerson = (req,res) =>
const person = new Person( ...req.body )

person.save()
.then(person =>
res.send(person);
)
.catch(err =>
res.status(400).json(err)
);










share|improve this question






















  • This is not promise vs async/await, because async/await is syntactic sugar for promises. This is Mongoose promise vs callback API. Callback API is obsolete. And it certainly shouldn't be used with async/await like in example above

    – estus
    Nov 14 '18 at 19:08
















1















Using ExpressJs (as Web framework for Node.js) and Mongoose (for modeling MongoDB) to create a web service. I had a question about the best approach to handle the return object from some mongoose methods as (save, find, findByIdAndDelete, etc).



As the mongoose documentation says, the Model.prototype.save() will returns «Promise,undefined» Returns undefined if used with callback or a Promise otherwise.
For more: https://mongoosejs.com/docs/api.html#model_Model-save



So i want to know which one should we use or on which case one is better that the other?



As example using ES7 Async/Await:



const mongoose = require('mongoose');
const Person = mongoose.model('person');

module.exports.savePerson = async (req,res) =>
await new Person( ...req.body )
.save( (err, doc)=>
err ? res.status(400).json(err) : res.send(doc);
);



As example using ES6 Promise:



const mongoose = require('mongoose');
const Person = mongoose.model('person');

module.exports.savePerson = (req,res) =>
const person = new Person( ...req.body )

person.save()
.then(person =>
res.send(person);
)
.catch(err =>
res.status(400).json(err)
);










share|improve this question






















  • This is not promise vs async/await, because async/await is syntactic sugar for promises. This is Mongoose promise vs callback API. Callback API is obsolete. And it certainly shouldn't be used with async/await like in example above

    – estus
    Nov 14 '18 at 19:08














1












1








1








Using ExpressJs (as Web framework for Node.js) and Mongoose (for modeling MongoDB) to create a web service. I had a question about the best approach to handle the return object from some mongoose methods as (save, find, findByIdAndDelete, etc).



As the mongoose documentation says, the Model.prototype.save() will returns «Promise,undefined» Returns undefined if used with callback or a Promise otherwise.
For more: https://mongoosejs.com/docs/api.html#model_Model-save



So i want to know which one should we use or on which case one is better that the other?



As example using ES7 Async/Await:



const mongoose = require('mongoose');
const Person = mongoose.model('person');

module.exports.savePerson = async (req,res) =>
await new Person( ...req.body )
.save( (err, doc)=>
err ? res.status(400).json(err) : res.send(doc);
);



As example using ES6 Promise:



const mongoose = require('mongoose');
const Person = mongoose.model('person');

module.exports.savePerson = (req,res) =>
const person = new Person( ...req.body )

person.save()
.then(person =>
res.send(person);
)
.catch(err =>
res.status(400).json(err)
);










share|improve this question














Using ExpressJs (as Web framework for Node.js) and Mongoose (for modeling MongoDB) to create a web service. I had a question about the best approach to handle the return object from some mongoose methods as (save, find, findByIdAndDelete, etc).



As the mongoose documentation says, the Model.prototype.save() will returns «Promise,undefined» Returns undefined if used with callback or a Promise otherwise.
For more: https://mongoosejs.com/docs/api.html#model_Model-save



So i want to know which one should we use or on which case one is better that the other?



As example using ES7 Async/Await:



const mongoose = require('mongoose');
const Person = mongoose.model('person');

module.exports.savePerson = async (req,res) =>
await new Person( ...req.body )
.save( (err, doc)=>
err ? res.status(400).json(err) : res.send(doc);
);



As example using ES6 Promise:



const mongoose = require('mongoose');
const Person = mongoose.model('person');

module.exports.savePerson = (req,res) =>
const person = new Person( ...req.body )

person.save()
.then(person =>
res.send(person);
)
.catch(err =>
res.status(400).json(err)
);







javascript node.js mongodb express mongoose






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 14 '18 at 18:11









CesarCedanoVCesarCedanoV

214




214












  • This is not promise vs async/await, because async/await is syntactic sugar for promises. This is Mongoose promise vs callback API. Callback API is obsolete. And it certainly shouldn't be used with async/await like in example above

    – estus
    Nov 14 '18 at 19:08


















  • This is not promise vs async/await, because async/await is syntactic sugar for promises. This is Mongoose promise vs callback API. Callback API is obsolete. And it certainly shouldn't be used with async/await like in example above

    – estus
    Nov 14 '18 at 19:08

















This is not promise vs async/await, because async/await is syntactic sugar for promises. This is Mongoose promise vs callback API. Callback API is obsolete. And it certainly shouldn't be used with async/await like in example above

– estus
Nov 14 '18 at 19:08






This is not promise vs async/await, because async/await is syntactic sugar for promises. This is Mongoose promise vs callback API. Callback API is obsolete. And it certainly shouldn't be used with async/await like in example above

– estus
Nov 14 '18 at 19:08













1 Answer
1






active

oldest

votes


















2














Don't use a callback if you want to await it:



 module.exports.savePerson = async (req,res) => 
try
const doc = await new Person( ...req.body ).save();
res.send(doc);
catch(error)
res.status(400).json(err);

;



So i want to know should we use [.thens] or [awaits] ?




Thats opinion based, but in my eyes await is way more readable, especially when you have to wait for multiple things.




Security advise: Directly passing the clients data to the database without validation is a bit dangerous.






share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53306400%2fdifference-on-mongoose-using-promise-or-async-await%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    Don't use a callback if you want to await it:



     module.exports.savePerson = async (req,res) => 
    try
    const doc = await new Person( ...req.body ).save();
    res.send(doc);
    catch(error)
    res.status(400).json(err);

    ;



    So i want to know should we use [.thens] or [awaits] ?




    Thats opinion based, but in my eyes await is way more readable, especially when you have to wait for multiple things.




    Security advise: Directly passing the clients data to the database without validation is a bit dangerous.






    share|improve this answer



























      2














      Don't use a callback if you want to await it:



       module.exports.savePerson = async (req,res) => 
      try
      const doc = await new Person( ...req.body ).save();
      res.send(doc);
      catch(error)
      res.status(400).json(err);

      ;



      So i want to know should we use [.thens] or [awaits] ?




      Thats opinion based, but in my eyes await is way more readable, especially when you have to wait for multiple things.




      Security advise: Directly passing the clients data to the database without validation is a bit dangerous.






      share|improve this answer

























        2












        2








        2







        Don't use a callback if you want to await it:



         module.exports.savePerson = async (req,res) => 
        try
        const doc = await new Person( ...req.body ).save();
        res.send(doc);
        catch(error)
        res.status(400).json(err);

        ;



        So i want to know should we use [.thens] or [awaits] ?




        Thats opinion based, but in my eyes await is way more readable, especially when you have to wait for multiple things.




        Security advise: Directly passing the clients data to the database without validation is a bit dangerous.






        share|improve this answer













        Don't use a callback if you want to await it:



         module.exports.savePerson = async (req,res) => 
        try
        const doc = await new Person( ...req.body ).save();
        res.send(doc);
        catch(error)
        res.status(400).json(err);

        ;



        So i want to know should we use [.thens] or [awaits] ?




        Thats opinion based, but in my eyes await is way more readable, especially when you have to wait for multiple things.




        Security advise: Directly passing the clients data to the database without validation is a bit dangerous.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 14 '18 at 18:14









        Jonas WilmsJonas Wilms

        59.1k53152




        59.1k53152





























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53306400%2fdifference-on-mongoose-using-promise-or-async-await%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            How to read a connectionString WITH PROVIDER in .NET Core?

            Node.js Script on GitHub Pages or Amazon S3

            Museum of Modern and Contemporary Art of Trento and Rovereto