Angular 在promise块外使用变量

Angular 在promise块外使用变量,angular,typescript,promise,angular6,Angular,Typescript,Promise,Angular6,如何在Angular 6中的组件中获得promise块外的变量 比如说 项:字符串[]=[]; 恩戈尼特{ const url='SOME url'; const promise=this.apiService.post(url); //回应 承诺。然后(回复=>{ 这个.items.push('abc'); 此.items.push('def'); }); this.items.forEach(item=>{ 警报(项目); }); } 我希望应用程序在您执行此操作时会提醒items数组的内

如何在Angular 6中的组件中获得promise块外的变量

比如说

项:字符串[]=[];
恩戈尼特{
const url='SOME url';
const promise=this.apiService.post(url);
//回应
承诺。然后(回复=>{
这个.items.push('abc');
此.items.push('def');
});
this.items.forEach(item=>{
警报(项目);
});
}
我希望应用程序在您执行此操作时会提醒items数组的内容

this.items.forEach(item=>{
     alert(item);
    });
项目数组为空

你需要把这个代码放进去

  promise.then(response => {
          this.items.push('abc');
          this.items.push('def');
         this.items.forEach(item=>{
            alert(item);
           });
     });
或者您可以使用Observables来了解承诺何时结束并执行foreach,您需要执行以下操作:

private subjectItems = new Subject<any>();

ngOnInit{

    this.subjectItems.asObservable().subscribe(o => {
        this.items.forEach(item=>{
         alert(item);
        });
      });

    const url='SOME URL';
    const promise = this.apiService.post(url);

        //Response
        promise.then(response => {
           this.items.push('abc');
           this.items.push('def');

           this.subjectItems.next(this.items)
        });
      }
private subjectItems=new Subject();
恩戈尼特{
this.subjectItems.asObservable().subscribe(o=>{
this.items.forEach(item=>{
警报(项目);
});
});
const url='SOME url';
const promise=this.apiService.post(url);
//回应
承诺。然后(回复=>{
这个.items.push('abc');
此.items.push('def');
this.subjectItems.next(this.items)
});
}
当您这样做时

this.items.forEach(item=>{
     alert(item);
    });
项目数组为空

你需要把这个代码放进去

  promise.then(response => {
          this.items.push('abc');
          this.items.push('def');
         this.items.forEach(item=>{
            alert(item);
           });
     });
或者您可以使用Observables来了解承诺何时结束并执行foreach,您需要执行以下操作:

private subjectItems = new Subject<any>();

ngOnInit{

    this.subjectItems.asObservable().subscribe(o => {
        this.items.forEach(item=>{
         alert(item);
        });
      });

    const url='SOME URL';
    const promise = this.apiService.post(url);

        //Response
        promise.then(response => {
           this.items.push('abc');
           this.items.push('def');

           this.subjectItems.next(this.items)
        });
      }
private subjectItems=new Subject();
恩戈尼特{
this.subjectItems.asObservable().subscribe(o=>{
this.items.forEach(item=>{
警报(项目);
});
});
const url='SOME url';
const promise=this.apiService.post(url);
//回应
承诺。然后(回复=>{
这个.items.push('abc');
此.items.push('def');
this.subjectItems.next(this.items)
});
}

这似乎是一个异步问题,我的意思是在您从服务获取数据之前会显示您的警报,因此一个选项是使用
可观察对象
订阅
。它应该等到获得数据后再使用它


您也可以尝试使用
async/await
然后执行此操作

这似乎是一个异步问题,我的意思是在您从服务获取数据之前会显示您的警报,因此可以选择使用
可观察对象
订阅
。它应该等到获得数据后再使用它


此外,您还可以尝试使用
async/await
然后执行此操作

可能重复的问题是,我希望应用程序提醒承诺块之外的项目,因为我希望使用承诺块之外的项目变量。您必须有某种方式知道承诺已解决。将警报放在
之后的块中的原因是,您知道您的承诺已在此时得到解决。否则,您可以在承诺尚未解决时执行
thisitems.forEach(item=>alert(item))
,因此列表为空时不显示任何内容。如果您试图在模板中使用
this.items
,您应该不会有问题,因为当值发生任何变化时,它会更新。@Freedor86我编辑我的答案以添加其他方法,问题是,我希望应用程序提醒承诺块之外的项,因为我想使用承诺块之外的项变量。您必须有某种方式知道承诺已解决。将警报放在
之后的块中的原因是,您知道您的承诺已在此时得到解决。否则,您可以在承诺尚未解决时执行
thisitems.forEach(item=>alert(item))
,因此列表为空时不显示任何内容。如果您试图在模板中使用
this.items
,您应该不会有问题,因为它会在值发生任何变化时进行更新。@Freedor86我编辑了我的答案,添加了其他方法和可观察项。