Angular 在我的角度分量中消耗我的承诺
在我的angular服务中,我有一个方法可以进行AJAX调用并返回一个承诺(在本例中我不使用Observable)。方法如下所示:Angular 在我的角度分量中消耗我的承诺,angular,typescript,asynchronous,promise,Angular,Typescript,Asynchronous,Promise,在我的angular服务中,我有一个方法可以进行AJAX调用并返回一个承诺(在本例中我不使用Observable)。方法如下所示: @Injectable() export class InnerGridService { ... private results: Object[]; constructor(private logService: LogService, private http: Http) { ... this.results = [
@Injectable()
export class InnerGridService {
...
private results: Object[];
constructor(private logService: LogService, private http: Http) {
...
this.results = [];
}
loadAccountList() {
let promise = new Promise((resolve, reject) => {
this.http.get(`${this.baseUrl}`)
.toPromise()
.then(
res => {
this.results = res.json().results;
resolve();
},
msg => {
reject(msg);
}
);
});
return promise;
}
}
我试图在组件中使用此promise对象,方法是将其分配给如下变量:
export class ClientListRowDetailsComponent implements ICellRendererAngularComp {
promiseRowData: any[];
constructor(private innergridService: InnerGridService) {
}
ngOnInit(): void {
...
// my JSON array from promise
this.promiseRowData = this.innergridService.loadAccountListPromise();
}
}
现在在我的组件中有一个对象[object Promise]
,但我想知道在我的角度组件中使用这个对象的正确方式是什么?如果它是一个可观察的,我会通过做以下事情来同意它:
this.responseObject$.subscribe(( response: ResponseObject) => {...}
我想知道在我的组件中使用承诺的最佳方式是什么。在调用
resolve
时,应该添加res.json().results
作为参数,如下所示:resolve(res.json().results)代码>
然后,当您得到承诺时,对其调用。然后()
this.innergridService.loadAccountList()
.then(result => this.promiseRowData = result);
或者您可以利用async/await
语法:
async loadAccountList() {
return new Promise((resolve, reject) => {
this.http.get(`${this.baseUrl}`)
.toPromise()
.then(
res => {
this.results = res.json().results;
resolve(res.json().results);
},
msg => {
reject(msg);
}
);
});
}
在您的组件中:
async ngOnInit(): void {
...
// my JSON array from promise
this.promiseRowData = await this.innergridService.loadAccountList();
}
调用resolve
时,应该添加res.json().results
作为参数,如下所示:resolve(res.json().results)代码>
然后,当您得到承诺时,对其调用。然后()
this.innergridService.loadAccountList()
.then(result => this.promiseRowData = result);
或者您可以利用async/await
语法:
async loadAccountList() {
return new Promise((resolve, reject) => {
this.http.get(`${this.baseUrl}`)
.toPromise()
.then(
res => {
this.results = res.json().results;
resolve(res.json().results);
},
msg => {
reject(msg);
}
);
});
}
在您的组件中:
async ngOnInit(): void {
...
// my JSON array from promise
this.promiseRowData = await this.innergridService.loadAccountList();
}
你为什么要用承诺?强烈建议你用可观察的来代替角度。是的,我知道,但对于我无法控制的情况,我需要使用承诺…为什么你必须使用承诺?强烈建议您使用Observable代替Angular。是的,我知道,但对于我无法控制的情况,我需要使用Promise…哦,有趣,但只是一个澄清…代码this.innergridService.loadAccountList()
。然后(结果=>this.promiseRowData=result)代码>。那是在我的组件中吗?我想我是用this.promiseRowData=wait this.innergridService.loadAccountList()调用它的代码>组件中的是。这两者基本相同,只是语法不同(async/await基本上是处理返回承诺的函数的语法糖,因此您的代码看起来更像经典的同步代码,更具可读性)。我想你会建议用关键字wait来称呼它,因为它更容易阅读?而不是经典的。那么?是的,如果您编写新代码,最好使用async/await语法。哦,很有趣,但只是澄清一下……代码this.innergridService.loadAccountList()
。然后(result=>this.promiseRowData=result)代码>。那是在我的组件中吗?我想我是用this.promiseRowData=wait this.innergridService.loadAccountList()调用它的代码>组件中的是。这两者基本相同,只是语法不同(async/await基本上是处理返回承诺的函数的语法糖,因此您的代码看起来更像经典的同步代码,更具可读性)。我想你会建议用关键字wait来称呼它,因为它更容易阅读?是的,如果您编写新代码,最好使用异步/等待语法。