Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 如何在findOneAndUpdate中使用异步等待_Javascript_Node.js_Async Await - Fatal编程技术网

Javascript 如何在findOneAndUpdate中使用异步等待

Javascript 如何在findOneAndUpdate中使用异步等待,javascript,node.js,async-await,Javascript,Node.js,Async Await,我尝试了以下代码-在数据库中找到一个名称并用另一个名称替换,然后计算并打印年龄为30岁的文档的数量 const findAndUpdate=async(姓名、年龄)=>{ const user=await user.findOneAndUpdate({name}) const count=await User.countDocuments({age}) 返回计数 } findAndUpdate('oldName','newName',30)。然后(计数=>{ console.log(计数) })

我尝试了以下代码-在数据库中找到一个名称并用另一个名称替换,然后计算并打印年龄为30岁的文档的数量

const findAndUpdate=async(姓名、年龄)=>{
const user=await user.findOneAndUpdate({name})
const count=await User.countDocuments({age})
返回计数
}
findAndUpdate('oldName','newName',30)。然后(计数=>{
console.log(计数)
}).catch(e=>{
控制台日志(e)
})

您使用得很好。Async/await的工作原理如下。 您有一个执行任务的函数,但您不想等到它完成任务后再继续执行另一个任务


然后使用async语句显示它是一个异步函数,然后在执行返回数据的任务时使用Wait,这样它就不会阻塞其他任务。

您可以很好地使用它。Async/await的工作原理如下。 您有一个执行任务的函数,但您不想等到它完成任务后再继续执行另一个任务


然后使用async语句显示它是一个异步函数,然后在执行返回数据的任务时使用Wait,这样它就不会阻止其他任务。

问题是,您正在调用
findAndUpdate
以期望它返回承诺,如果要使用
。那么
要获得计数,函数必须返回一个承诺

const findAndUpdate=(姓名、年龄)=>{
返回新承诺(异步(解析、拒绝)=>{
试一试{
const user=await user.findOneAndUpdate(…)
const count=wait User.countDocuments(…)
解析(计数)
}捕捉(错误){
拒绝(错误)
}
})
}
findAndUpdate(…)。然后(计数=>{
console.log(计数)
}).catch(e=>{
控制台日志(e)
})

问题是,如果要使用
,则调用
findanddupdate
希望它返回承诺。然后
要获得计数,函数必须返回承诺

const findAndUpdate=(姓名、年龄)=>{
返回新承诺(异步(解析、拒绝)=>{
试一试{
const user=await user.findOneAndUpdate(…)
const count=wait User.countDocuments(…)
解析(计数)
}捕捉(错误){
拒绝(错误)
}
})
}
findAndUpdate(…)。然后(计数=>{
console.log(计数)
}).catch(e=>{
控制台日志(e)
})

看起来您没有向
用户提供新名称。findOneAndUpdate()
。您可以这样修复它:

const findAndUpdate=async(旧名、新名、年龄)=>{
const user=await user.findOneAndUpdate({name:oldName},{name:newName})
const count=await User.countDocuments({age})
返回计数
}
findAndUpdate('oldName','newName',30)。然后(计数=>{
console.log(计数)
}).catch(e=>{
控制台日志(e)
})

看起来您没有向
用户提供新名称。findOneAndUpdate()
。您可以这样修复它:

const findAndUpdate=async(旧名、新名、年龄)=>{
const user=await user.findOneAndUpdate({name:oldName},{name:newName})
const count=await User.countDocuments({age})
返回计数
}
findAndUpdate('oldName','newName',30)。然后(计数=>{
console.log(计数)
}).catch(e=>{
控制台日志(e)
})

显示错误原因:AssertionError[ERR_ASSERTION]:计算为错误值的表达式:assert.ok(!isNaN(val))显示错误原因:AssertionError[ERR_ASSERTION]:计算为错误值的表达式:assert.ok(!isNaN(val))您的函数接受两个参数,“name”和“age”,但您使用三个参数调用它…您好,先生,在数据库'name'中,旧名称需要替换为新名称。那么我应该使用哪个参数??async(name,name,age)返回错误重复您的函数有两个参数'name'和'age',但您用三个参数调用它…您好,先生,在数据库'name'中,旧名称需要替换为新名称。那么我应该使用哪个参数??async(姓名、姓名、年龄)返回错误重复此处我可以插入替换的旧名称和新名称我假设您使用的是mongoose?声明函数async使其返回承诺。此处我可以插入替换的旧名称和新名称我假设您使用的是mongoose?声明函数async使其返回承诺。已完成显示“感谢反馈!记录声誉低于15的人所投的票,但不更改公开显示的帖子分数。”已显示“感谢反馈!记录声誉低于15的人所投的票,但不更改公开显示的帖子分数。”