angular - 响应后调用函数
问题描述
使用 Angular,我试图将一个大功能分成多个较小的功能。使用以下内容:
getSites() {
this.http.get(`https://example.com/dev/_api/web/lists/getbytitle('Site Master')/items?$select=*,Hub/Title&$expand=Hub&$filter=Hub/Title eq 'Project Hub' and Active eq 'Yes'`).subscribe(data => {
console.log(`project sites`, data['value'])
this.sites = data['value']
this.getLists() //Wait for this.sites to populate, then fire
})
}
getLists() {
this.sites.forEach(site => {
this.http.get(`${site['Site']}/_api/web/lists/?$select=*&$filter=BaseTemplate eq 171`).subscribe(data => {
console.log("Site's lists", data['value'])
this.getTasks(data['value'], site)
})
})
}
但是,getLists()
在触发之前this.sites
可以从第一个请求中完全填充。我该如何解决这个问题?
解决方案
您可以使用 concatMap 管道代替订阅这两个函数(它将等到 getSites 完成)
getSites():Observable<any>{
this.http(...).pipe(map(() => ....)
}
getList(): Observable<any>{
// do some stuff
}
// and use it like this
getSites().pipe(contactMap((getSiteResult) => getList(getSiteResult)).subscribe()
希望能帮助到你
推荐阅读
- javascript - JavaScript:将未知数量的参数从一种方法传递给另一种方法
- html - HTML/CSS 元素在分屏设计中的绝对位置
- javascript - Javascript/CSS 侧边栏切换
- google-apps-script - 如何使用 for 循环设置值(用于列)
- c++ - 如何在 BST 中获得小于给定键的所有值?
- java - 在 Java 中访问面板的问题的解决方案?
- sprite-kit - 未使用 Metal,但出现错误“Metal GPU Frame Capture Enabled”
- magento - 每次我尝试启用或禁用任何模块时,Magento 2 都会崩溃
- rust - 在 build.rs 中获取 --bin 参数
- c++ - 使用 do while 循环从头开始