如何解决如何从作为对象属性的Promise访问数据
我有以下对象数组
const people = [
{
id:'John:1:Aries',exp:40.3,scores: [4,4,5,6,5],futureScores:Promise.resolve([5,6]),},{
id:'Jane:2:Pisces',exp:57.6,scores: [6,6],futureScores:Promise.resolve([4,{
id:'Tom:3:Leo',exp:30.3,{
id:'Amy:4:Sagittarius',exp:35.0,futureScores:Promise.resolve([6,];
const extractId = (people) => {
return people.filter((person) => {
const id = person.id;
if(id.includes("a")){
return person;
}
})
}
const scores = extractId(people);
const avg = (scores) => {
const getavg = scores.map((el) => el.scores.reduce((a,b) => a +b,0)/el.scores.length);
const allavg = getavg.reduce((a,b) => a+b/getavg.length,0)
return allavg;
}
我想访问futureScores属性并将分数记录在另一个变量中 尝试了以下
const future = (scores) => {
const arr = [];
const fscore = scores.map((el) => {
const fscores = el.futureScores;
const result = fscores.then(function(value){
console.log(value);
arr.concat.value;
});
return result
})
return fscore;
}
console.log(future(scores));
第一个console.log输出分数,而console.log(future(scores))输出[Promise {},Promise {}] 我在做什么错了?
解决方法
这就是您在地图中处理承诺的方式。想法是您应该返回承诺图并解决它们。像这样:
const future = (scores) => {
return scores.map((el) => {
const fscores = el.futureScores;
return fscores.then((value) => value);
})
}
Promise.all(future(scores)).then(res=> {
console.log(res)
})
我们的想法是返回fscore
,这是一个单独的承诺,但是由于它是一个映射,所以最后我们有了一系列的承诺,可以用Promise.all
来解决
我没有使用arr.concat.value,因为您没有使用它。而且,如果您想实际更改数组,请执行arr = arr.concat.value;
,因为concat不会改变原始数组,而是创建一个新数组。
您需要在map函数内部返回数组。
const future = (scores) => {
const arr = [];
const fscore = scores.map((el) => {
const fscores = el.futureScores;
const result = fscores.then(function(value){
console.log(value);
return arr.concat.value;
});
return result
})
return fscore;
}
future(scores).forEach( val => {
console.log(val)
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。