我使用地理配准系统, 我正在按纳税人名称进行搜索,作为回应,他在地图上返回了一个批次,他在数据库中发出了一个请求,如果请求是正确的,则使用async / await将其重定向到该批次,但是我不能使用它是因为在生产中babel不接受
async buscarGeometria(entidade) {
let entidadeAnterior = entidade;
if (entidade && entidade.id) {
this.LoadingManager.show();
if (entidade && entidade.isPessoa) {
entidade = await this.DataFactory.GET(this.URL.LOTES() + '/' + entidade.val.lotes[0].id);
entidade.URL = this.URL.LOTES();
entidade.box = 'BoxInformacoesCadastrais';
}
this.DataFactory
.GET(entidade.URL + '/geometria/' + entidade.id)
.then(response => {
if (response && response.geom) {
entidadeAnterior.isPessoa ? this.CentralizaMapaBuscasService.centralizaMapa(this.mapa, entidade.centroide)
: this.CentralizaMapaBuscasService.centralizaMapa(this.mapa, entidade.val.centroide);
this.select = this.CentralizaMapaBuscasService.getSelect('Lotes', this.mapa);
this.CentralizaMapaBuscasService.criarFeatureAndSelect(response.geom, this.select)
entidadeAnterior.isPessoa ? this.CentralizaMapaBuscasService.mostraBroadcast(entidade.box, entidade)
: this.CentralizaMapaBuscasService.mostraBroadcast(entidade.box, entidade.val);
}
}).finally(() => this.LoadingManager.hide());
}
}
但是我无法使用async / await处理babel兼容性问题,我做出了承诺,但是没有用
buscarGeometria(entidade) {
let entidadeAnterior = entidade;
if (entidade && entidade.id) {
this.LoadingManager.show();
if (entidade && entidade.isPessoa) {
this.DataFactory.GET(this.URL.LOTES() + '/' + entidade.val.lotes[0].id).then((snap) => {
entidade = snap;
entidade.URL = this.URL.LOTES();
entidade.box = 'BoxInformacoesCadastrais';
});
}
this.DataFactory.GET(entidade.URL + '/geometria/' + entidade.id).then(response => {
if (response && response.geom) {
entidadeAnterior.isPessoa ? this.CentralizaMapaBuscasService.centralizaMapa(this.mapa, entidade.centroide)
: this.CentralizaMapaBuscasService.centralizaMapa(this.mapa, entidade.val.centroide);
this.select = this.CentralizaMapaBuscasService.getSelect('Lotes', this.mapa);
this.CentralizaMapaBuscasService.criarFeatureAndSelect(response.geom, this.select);
entidadeAnterior.isPessoa ? this.CentralizaMapaBuscasService.mostraBroadcast(entidade.box, entidade)
: this.CentralizaMapaBuscasService.mostraBroadcast(entidade.box, entidade.val);
}
}).finally(() => this.LoadingManager.hide());
}
}
我想知道其他方法,谢谢
答案 0 :(得分:0)
您在第二次尝试中没有正确使用承诺。
此行将返回一个承诺:
this.DataFactory.GET(this.URL.LOTES() + '/' + entidade.val.lotes[0].id).then((snap) => {
entidade = snap;
entidade.URL = this.URL.LOTES();
entidade.box = 'BoxInformacoesCadastrais';
});
这意味着在下一行entidade
中将没有预期值:
this.DataFactory.GET(entidade.URL + '/geometria/' + entidade.id)
您必须改为兑现承诺:
this.DataFactory.GET(this.URL.LOTES() + '/' + entidade.val.lotes[0].id).then((snap) => {
entidade = snap;
entidade.URL = this.URL.LOTES();
entidade.box = 'BoxInformacoesCadastrais';
return entidade; // Make sure you return the entidade value to make it available to the next callback
})
.then((entidade) => {
return this.DataFactory.GET(entidade.URL + '/geometria/' + entidade.id);
})
.then((response) => {
// Handle your response here
});
您可能应该阅读以下内容以了解如何兑现承诺:https://javascript.info/promise-chaining
顺便说一句,您可能会考虑将功能拆分为多个较小的功能。这将使您的代码更容易阅读。