如何解决我很难理解为什么我的函数返回得比预期的要早异步等待
我不太确定发生了什么,或者我对异步函数的理解很不好。
我有两个功能:
const retrieveConvosList=(username)=>{
return new Promise(async(resolve,reject)=>{
await userModel.findOne({username:username},async(error,foundUser)=>{
if(error) return reject(error);
resolve(await retrieveConvosListName(foundUser.convos,username));
})
})
}
和
const retrieveConvosListName=async(convoIDList,username)=>{
let convoListAndName = [];
convoIDList.forEach(async(convo)=> {
await messages.findById(convo,(error,foundConvo)=>{
if(error) console.log(error);
foundConvo.users.forEach(user => {
if(user != username){
const convoIndex = foundConvo.convoIndex;
const objLit = {};
objLit[convoIndex] = user;
convoListAndName.push(objLit);
}
});
})
});
return convoListAndName;
})
在我的其中一条路线中调用了retrieveConvosList
renderOBJ.convoList = await roomUtilLib.retrieveConvosList(renderOBJ.user.username);
问题是我的函数 retrieveConvosListName 在回调之前返回了 convoListAndName 的值(这是我在函数开始时分配的一个空数组)。 messages.findById 完成。
我似乎无法理解它的行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。