getUserInfo
-接收所有用户数组并将其传递给回调函数的函数。
getUsersIds
-返回用户ID的数组(异步函数)
getUserInfo
-返回给定标识符的用户数据(异步功能)
该函数必须调用第一个参数传递的回调,并在其中传递用户数据数组。
结果数组中用户的顺序必须与getUsersIds中数组中ID的顺序匹配
const { getUserInfo, getUsersIds } = db;
function getUsersInfo(onLoad) {
let res = [];
getUsersIds(ids => {
ids.forEach((id, index) => {
getUserInfo((id, value) => {
res[index] = value;
console.log(value);
if(ids.length === res.length){
onLoad(res);
}
})
})
})
}
数据与索引不匹配。怎么做呢?
答案 0 :(得分:1)
您将立即触发所有getUserInfo
调用,并在这些调用解析时填充res
数组,这不会以相同的顺序进行。您可以使用Promise.all()
或Promise.allSettled()
等待所有文件分别解析或解析/拒绝,然后返回结果。
您可以使用
function getUsersInfo() {
return getUsersIds().then(ids => Promise.all(ids.map(getUserInfo)))
}
...或使用async/await
:
async function getUsersInfo() {
let ids = await getUsersIds();
let infos = await Promise.all(ids.map(getUserInfo));
return infos
}
...然后像这样调用onLoad
函数
getUsersInfo().then(onLoad);