how to correctly deal with promisesPromise-driven animationCaching/memoizing promise resultsUsing a Wrapper...

What is paid subscription needed for in Mortal Kombat 11?

How do we know the LHC results are robust?

when is out of tune ok?

Would this custom Sorcerer variant that can only learn any verbal-component-only spell be unbalanced?

Unreliable Magic - Is it worth it?

Pre-amplifier input protection

What is the intuitive meaning of having a linear relationship between the logs of two variables?

Different result between scanning in Epson's "color negative film" mode and scanning in positive -> invert curve in post?

How do I extract a value from a time formatted value in excel?

I'm in charge of equipment buying but no one's ever happy with what I choose. How to fix this?

Term for the "extreme-extension" version of a straw man fallacy?

How does it work when somebody invests in my business?

How long to clear the 'suck zone' of a turbofan after start is initiated?

How do scammers retract money, while you can’t?

What does "I’d sit this one out, Cap," imply or mean in the context?

Applicability of Single Responsibility Principle

Crossing the line between justified force and brutality

Is `x >> pure y` equivalent to `liftM (const y) x`

Is there a korbon needed for conversion?

Why does indent disappear in lists?

How to be diplomatic in refusing to write code that breaches the privacy of our users

How did Doctor Strange see the winning outcome in Avengers: Infinity War?

Anatomically Correct Strange Women In Ponds Distributing Swords

Pole-zeros of a real-valued causal FIR system



how to correctly deal with promises


Promise-driven animationCaching/memoizing promise resultsUsing a Wrapper PromiseAngular Promise trying WrapperCalling a promise recursivelyPromise Chaining Forgot PasswordNode.js Sequelize PromiseTypeScript based Promise/A+ compliant, awaitable promise class for Node.jsPromise implementation in PythonExtending Mojo::Promise













1












$begingroup$


The following function is accepting PUT connection to a server API, checks authorization to write and then performs write to a database.



The eslint linting tool complains saying "avoid nesting promises" and "Each then() should return a value or throw". I'm new to promises and I am not sure how to improve my code.



app.put('/api/v0/note/:id', (req, res) => {
const id = req.params.id;
const uid = req.user ? req.user.uid : null;
return user_can_edit_note(uid, id).then(yes => {
if (yes) {
return db.collection('notes').doc(id).update({
title: req.body.title,
text: req.body.text,
author_uid: req.user ? req.user.uid : null,
updated_on: admin.firestore.Timestamp.now()
}).then(() => {
return res.json({
ok: "ok"
});
});
} else {
return res.status(403).json({
error: "Permission Denied",
note_id: id
});
}
}).catch((err) => {
console.error(err);
return res.status(500).json({error: String(err)});
});
});









share|improve this question











$endgroup$

















    1












    $begingroup$


    The following function is accepting PUT connection to a server API, checks authorization to write and then performs write to a database.



    The eslint linting tool complains saying "avoid nesting promises" and "Each then() should return a value or throw". I'm new to promises and I am not sure how to improve my code.



    app.put('/api/v0/note/:id', (req, res) => {
    const id = req.params.id;
    const uid = req.user ? req.user.uid : null;
    return user_can_edit_note(uid, id).then(yes => {
    if (yes) {
    return db.collection('notes').doc(id).update({
    title: req.body.title,
    text: req.body.text,
    author_uid: req.user ? req.user.uid : null,
    updated_on: admin.firestore.Timestamp.now()
    }).then(() => {
    return res.json({
    ok: "ok"
    });
    });
    } else {
    return res.status(403).json({
    error: "Permission Denied",
    note_id: id
    });
    }
    }).catch((err) => {
    console.error(err);
    return res.status(500).json({error: String(err)});
    });
    });









    share|improve this question











    $endgroup$















      1












      1








      1





      $begingroup$


      The following function is accepting PUT connection to a server API, checks authorization to write and then performs write to a database.



      The eslint linting tool complains saying "avoid nesting promises" and "Each then() should return a value or throw". I'm new to promises and I am not sure how to improve my code.



      app.put('/api/v0/note/:id', (req, res) => {
      const id = req.params.id;
      const uid = req.user ? req.user.uid : null;
      return user_can_edit_note(uid, id).then(yes => {
      if (yes) {
      return db.collection('notes').doc(id).update({
      title: req.body.title,
      text: req.body.text,
      author_uid: req.user ? req.user.uid : null,
      updated_on: admin.firestore.Timestamp.now()
      }).then(() => {
      return res.json({
      ok: "ok"
      });
      });
      } else {
      return res.status(403).json({
      error: "Permission Denied",
      note_id: id
      });
      }
      }).catch((err) => {
      console.error(err);
      return res.status(500).json({error: String(err)});
      });
      });









      share|improve this question











      $endgroup$




      The following function is accepting PUT connection to a server API, checks authorization to write and then performs write to a database.



      The eslint linting tool complains saying "avoid nesting promises" and "Each then() should return a value or throw". I'm new to promises and I am not sure how to improve my code.



      app.put('/api/v0/note/:id', (req, res) => {
      const id = req.params.id;
      const uid = req.user ? req.user.uid : null;
      return user_can_edit_note(uid, id).then(yes => {
      if (yes) {
      return db.collection('notes').doc(id).update({
      title: req.body.title,
      text: req.body.text,
      author_uid: req.user ? req.user.uid : null,
      updated_on: admin.firestore.Timestamp.now()
      }).then(() => {
      return res.json({
      ok: "ok"
      });
      });
      } else {
      return res.status(403).json({
      error: "Permission Denied",
      note_id: id
      });
      }
      }).catch((err) => {
      console.error(err);
      return res.status(500).json({error: String(err)});
      });
      });






      promise






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 7 mins ago







      Emanuele Paolini

















      asked 20 mins ago









      Emanuele PaoliniEmanuele Paolini

      2,0041712




      2,0041712






















          0






          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          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: "196"
          };
          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: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          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%2fcodereview.stackexchange.com%2fquestions%2f216388%2fhow-to-correctly-deal-with-promises%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • 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.


          Use MathJax to format equations. MathJax reference.


          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%2fcodereview.stackexchange.com%2fquestions%2f216388%2fhow-to-correctly-deal-with-promises%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







          Popular posts from this blog

          Fairchild Swearingen Metro Inhaltsverzeichnis Geschichte | Innenausstattung | Nutzung | Zwischenfälle...

          Pilgersdorf Inhaltsverzeichnis Geografie | Geschichte | Bevölkerungsentwicklung | Politik | Kultur...

          Marineschifffahrtleitung Inhaltsverzeichnis Geschichte | Heutige Organisation der NATO | Nationale und...