angular - ForEach 元素确实承诺得到最终的总和
问题描述
我正在尝试使用 facebook 的 GRAPH API 设置点赞计数器。我有一个对象 ID 列表,对于每个 ID,我使用 api 调用来获取这个对象有多少喜欢,然后设置一个总和。
但是这个调用返回了一个承诺,当我使用 foreach 时,即使我的列表中有多个元素,也只会重新调用一个调用。
我怎样才能得到这个总和?这是我的代码。
countLike(data : any[]){
let counter : number = 0;
data.forEach(element => {
this.debogger.debogSomething("Reached : " + element as string);
this.facebook.api("/"+ (element as string) +"?fields=likes", ["public_profile","user_posts"]).then((response) => {
counter += response.likes.data.length as number;
this.debogger.debogSomething(counter);
}).catch((err) => {
this.debogger.debogSomething(err);
});
});
}
这是我在stackoverflow的第一篇文章!非常感谢 !
**[编辑]新代码,仍然无法正常工作**
countLike(){
Promise.all(this.objectIdsToFilter.map((value) => {
return this.facebook.api(value+"?fields=likes", ["public_profile","user_posts"])
}))
.then((response) => {
this.debogger.debogSomething(response)
})
.catch(err=>{
this.debogger.debogSomething(err);
})
}
在输入中,一个数组包含 3 个值,(2 个有效,1 个无效)。输出:没有任何反应(奇怪的是,调试器是一个弹出窗口)。
解决方案
您可能可以执行以下操作:-
countLike(data: any[]) {
let counter: number = 0;
Promise.all(data.map(element) => {
this.debogger.debogSomething("Reached : " + element as string);
this.facebook.api("/" + (element as string) + "?fields=likes", ["public_profile", "user_posts"])
}).then((response) => {
counter = response.reduce((sum, res) => {
sum += res.likes.data.length ;
}, 0);
this.debogger.debogSomething(counter);
}).catch((err) => {
this.debogger.debogSomething(err);
});
}
推荐阅读
- kubernetes - 如何在 Rancher UI 中进行 HELM 测试?
- reactjs - 如何从 React 的下拉列表中显示多个选定的值
- python - 在 Pycharm IDE 中的 h2o.init 上立即初始化和关闭 h2o 会话
- java - 在 Java 中覆盖匿名类的方法
- node.js - MS Teams 机器人的发送消息吞吐量是多少?
- angular - 专注于 ngselect on empty using 指令
- android - Android 登录到服务器
- gradle - gradle 找不到 flatDirs 文件
- flutter - 值更改时如何在 Flutter 上重绘小部件?
- android - 如何在android中以编程方式设置android:id?