Javascript 陷入了从回调函数到承诺的重构节点/Mongo代码的困境
我在node.js中编写了一个项目,其中异步是通过回调函数实现的。但是,我随后了解了Promises和async/await。重构项目代码以便用async/await替换所有回调函数是最佳做法吗 无论如何,作为对自己的一次训练,我决定先重构到Promises,然后再重构到async/Wait。然而,我有一些关于重构承诺的问题 现在,下面的例子并没有包含太多关于“回调地狱”的内容,所以你可能认为重构到承诺是没有必要的,但我故意从一个简单的例子开始。我的代码的其他部分确实包含回调地狱 下面是我的一个项目中使用的回调函数的示例。当用户选择一个BlogPost并单击“delete”时,将运行以下代码(BlogPost是数据库集合) 到目前为止,我已经像这样重构了它Javascript 陷入了从回调函数到承诺的重构节点/Mongo代码的困境,javascript,node.js,mongodb,es6-promise,Javascript,Node.js,Mongodb,Es6 Promise,我在node.js中编写了一个项目,其中异步是通过回调函数实现的。但是,我随后了解了Promises和async/await。重构项目代码以便用async/await替换所有回调函数是最佳做法吗 无论如何,作为对自己的一次训练,我决定先重构到Promises,然后再重构到async/Wait。然而,我有一些关于重构承诺的问题 现在,下面的例子并没有包含太多关于“回调地狱”的内容,所以你可能认为重构到承诺是没有必要的,但我故意从一个简单的例子开始。我的代码的其他部分确实包含回调地狱 下面是我的一个
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)
}
}
}