Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 陷入了从回调函数到承诺的重构节点/Mongo代码的困境_Javascript_Node.js_Mongodb_Es6 Promise - Fatal编程技术网

Javascript 陷入了从回调函数到承诺的重构节点/Mongo代码的困境

Javascript 陷入了从回调函数到承诺的重构节点/Mongo代码的困境,javascript,node.js,mongodb,es6-promise,Javascript,Node.js,Mongodb,Es6 Promise,我在node.js中编写了一个项目,其中异步是通过回调函数实现的。但是,我随后了解了Promises和async/await。重构项目代码以便用async/await替换所有回调函数是最佳做法吗 无论如何,作为对自己的一次训练,我决定先重构到Promises,然后再重构到async/Wait。然而,我有一些关于重构承诺的问题 现在,下面的例子并没有包含太多关于“回调地狱”的内容,所以你可能认为重构到承诺是没有必要的,但我故意从一个简单的例子开始。我的代码的其他部分确实包含回调地狱 下面是我的一个

我在node.js中编写了一个项目,其中异步是通过回调函数实现的。但是,我随后了解了Promises和async/await。重构项目代码以便用async/await替换所有回调函数是最佳做法吗

无论如何,作为对自己的一次训练,我决定先重构到Promises,然后再重构到async/Wait。然而,我有一些关于重构承诺的问题

现在,下面的例子并没有包含太多关于“回调地狱”的内容,所以你可能认为重构到承诺是没有必要的,但我故意从一个简单的例子开始。我的代码的其他部分确实包含回调地狱

下面是我的一个项目中使用的回调函数的示例。当用户选择一个BlogPost并单击“delete”时,将运行以下代码(BlogPost是数据库集合)

到目前为止,我已经像这样重构了它

app.post('/users/login', (req,res)=>{
    BlogPost
      .findByIdAndDelete(req.body.idOfPostToBeDeleted)
        .then(
        ()=>{res.redirect('/')})
        .catch((error)=>{console.log(error)})
      ;
      }
它似乎像预期的那样工作,但我觉得我没有正确地完成它,主要是因为我没有创建承诺构造函数。这方面的所有教程都包括promise构造函数

为什么在没有承诺构造器的情况下,这一切都能正常工作

如果没有承诺构造函数,“then”关键字会发生什么情况

这里的最佳实践是什么


我应该创建一个承诺构造函数吗?如果不指定回调,那么findbyianddelete足够智能,可以返回一个承诺

这就是为什么您不需要构建承诺。我认为你的方法还可以

为了可读性,大多数人更愿意使用async await编写以下内容:

app.post('/users/login', (req,res)=> {
  async (req,res)=>{
    try{
      const result = await BlogPost.findByIdAndDelete(req.body.idOfPostToBeDeleted)
      res.redirect('/')
    } catch(e)
    {
      console.log(error)
    }
  }
}

BlogPost.findbyianddelete的代码是什么样的?
app.post('/users/login', (req,res)=> {
  async (req,res)=>{
    try{
      const result = await BlogPost.findByIdAndDelete(req.body.idOfPostToBeDeleted)
      res.redirect('/')
    } catch(e)
    {
      console.log(error)
    }
  }
}