return new Promiseresolve = zip thishttpClientgetassetstmpi18n$thisi18ndefaultLangjson thishttpClientgetassetstmpapp-datajson thishttpClientpost httpscsdquoteidpbge
上面的代码是使用zip操作符将三个HTTP请求合并为一个可观察对象,并返回一个新的Promise。下面是该方法的标准写法:
return new Promise(resolve => {
zip(
this.httpClient.get(`assets/tmp/i18n/${this.i18n.defaultLang}.json`),
this.httpClient.get("assets/tmp/app-data.json"),
this.httpClient.post(
"https://csdquote.idpbg.efoxconn.com:1443/menus/getMenusByEmpNO",
{ EmpNo: userAccount, SysId: "30326" }
)
).subscribe(([i18nData, appData, menusData]) => {
resolve({ i18nData, appData, menusData });
});
});
上述代码使用subscribe方法订阅zip操作符的结果,并在数据到达时调用resolve方法将数据传递给Promise的then回调函数。
类似的方法还有forkJoin和combineLatest。下面是使用forkJoin的示例:
return new Promise(resolve => {
forkJoin([
this.httpClient.get(`assets/tmp/i18n/${this.i18n.defaultLang}.json`),
this.httpClient.get("assets/tmp/app-data.json"),
this.httpClient.post(
"https://csdquote.idpbg.efoxconn.com:1443/menus/getMenusByEmpNO",
{ EmpNo: userAccount, SysId: "30326" }
)
]).subscribe(([i18nData, appData, menusData]) => {
resolve({ i18nData, appData, menusData });
});
});
使用forkJoin时,它将等待所有请求完成后才发出结果。
使用combineLatest的示例:
return new Promise(resolve => {
combineLatest([
this.httpClient.get(`assets/tmp/i18n/${this.i18n.defaultLang}.json`),
this.httpClient.get("assets/tmp/app-data.json"),
this.httpClient.post(
"https://csdquote.idpbg.efoxconn.com:1443/menus/getMenusByEmpNO",
{ EmpNo: userAccount, SysId: "30326" }
)
]).subscribe(([i18nData, appData, menusData]) => {
resolve({ i18nData, appData, menusData });
});
});
combineLatest会在任何一个请求有新数据到达时发出结果
原文地址: https://www.cveoy.top/t/topic/izii 著作权归作者所有。请勿转载和采集!