在组件(或服务)中,我调用 Main 方法,该方法又调用另外 2 个私有方法。
export class MyService
{
private Stage1 (N : number)
{
console.log ('-->Stage1');
for (let i=0;i<N;i++)
{
//Send HTTP request
}
console.log ('<--Stage1');
}
private Stage2 (N: number)
{
console.log ('-->Stage2');
for (let i=0;i<N;i++)
{
//Send HTTP request
}
console.log ('<--Stage2');
}
public Main ()
{
this.Stage1 (5);
this.Stage2 (7);
}
}
问题:我希望仅在 Stage1 完成后才调用 Stage2。目标是获得以下输出:
-->Stage1
<--Stage1
-->Stage2
<--Stage2
您能否建议我应该在代码中添加什么内容?我尝试过:
async public Main ()
{
await this.Stage1 ();
await this.Stage2 ();
}
但这一概念失败了。
谢谢你,Zvika
有多种可能的解决方案。
await
关键字与承诺配合得很好,但我宁愿rxjs
在 Angular 项目内部使用及其管道。基本上,您可以使用zip 运算符或merge 运算符,将所有 http 调用放入其中。
如果您希望从
Stage1
内部获得响应Stage2
,则可以使用switchMap 运算符pipe
,但随后您需要将两个结果合并在一起。例子
使用时
Observables
不要忘记取消订阅可观察对象。即使只是冒泡一次的 http 调用也没关系。用于
forkJoin
并行执行 API,用于switchMap
切换到执行相同操作的内部可观察对象。构造函数中的代码在组件加载时初始化 API。
一个更好的方法是定义一个方法,当组件调用该方法时,该方法就会被调用
callApis
。您可以使用
Promise
并将它们放入承诺数组中,然后使用该Promise.all
方法等待所有承诺完成