回调"/>
NodeJS + mongoDB查询:承诺/回调
我有三个功能
A-> mongoDb查询,然后调用B,然后console.log(“ test”)
B->设置一些规则并呼叫C
C-> mongoDb查询返回A-> console.log(“ test”)
我在异步/承诺上遇到了麻烦,在很长一段时间后,我发现了一个似乎不太优雅的可行解决方案。(也许是因为我对异步/等待不是很熟悉)我想知道是否有更好/更优雅/更易读的解决方案?
这里是仅包含“有用部分”的代码。 (console.logs应该写1,2,3,4,5,6。)
app.get('/searchWingding', (req,res)=>{
users.findOneAndUpdate( mongoDBQuery
{returnOriginal : false})
.then(async () =>{
//remove unnecessary code for issue
console.log(1)
await wingdingsExhibitionRule(users,player, allWingdings)
console.log(6)
})})
async function wingdingsExhibitionRule(users,player, wingdingsList){
//remove unnecessary code for issue
console.log(2)
await changePlayerUnlock(users,player,"wingdingsExhibition")
console.log(5)
}
async function changePlayerUnlock(users,player,unlockRule){
//remove unnecessary code for issue
console.log(3)
const a = users.findOneAndUpdate(mongoDBQuery,
{returnOriginal : false})
.then(()=>{
console.log(4)
if(!checkStringInArray(player.unlock,unlockRule)){
player.unlock.push(unlockRule)
}
})
await a
}
```
回答如下:您正在使用async-await
语法和Promise。您的代码可以仅使用async-await
语法来编写,如下所示:
app.get('/searchWingding', async (req,res)=> {
await users.findOneAndUpdate()
console.log(1)
await wingdingsExhibitionRule(users,player, allWingdings)
console.log(6)
async function wingdingsExhibitionRule(users,player, wingdingsList){
console.log(2)
await changePlayerUnlock(users,player,"wingdingsExhibition")
console.log(5)
}
async function changePlayerUnlock(users,player,unlockRule) {
console.log(3)
const a = await users.findOneAndUpdate()
console.log(4)
}
更多推荐
NodeJS + mongoDB查询:承诺/回调
发布评论