Angular 在promise块外使用变量
如何在Angular 6中的组件中获得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数组的内
项:字符串[]=[];
恩戈尼特{
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我编辑了我的答案,添加了其他方法和可观察项。