1
我正在使用mergeMap產生一批查詢來找出基於點的地址。我將每個響應映射到數組中的對象。mergeMap完成太早
//ptosDistintos = ['-34.5466 58.4363', '-34.5523 58.4486', ...]
this.suscCalcularDirecciones = Observable.from(ptosDistintos)
.mergeMap(pos => {
//I convert every position to a latLng object (Leaflet)
const [lat, lng] = pos.split(' ');
const latlng = L.latLng(+lat, +lng);
//I make requests to Google to figure out addresses
return this.http.get(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${latlng.lat},${latlng.lng}`)
.filter(x => x.length)
//I return the address to the mergeMap.
.map(direccion =>
[pos, direccion.length ? direccion[0].formatted_address : '(no encontrada)'];
);
})
.finally(() => {
//I'm deleting the suscription once it is complete because in template I check for completion by checking emptyness of the subscription.
delete this.suscCalcularDirecciones;
})
.subscribe(posDir => {
const [pos, dir] = posDir;
for (let i of agrup[pos].indexes) {
this.historico[i].direccion = dir;
}
this.historico = this.historico.slice();
});
但是,mergeMap生成的observable完成得太早。 「finally」指令在幾個(如果不是第一個)「nexts」之後執行。在對Google完成所有查詢後,我可以做些什麼來調用它?
你可以做一個演示?代碼看起來很好,除了'delete this.suscCalcularDirecciones'。你不需要這樣做。 – martin
我這樣做是因爲我喜歡通過檢查訂閱的空白來檢查html中的完成情況。我知道如果我刪除那條線,這不會帶來任何困難。我的問題是指爲什麼會發生這種情況。 我試圖做一個演示,但我有問題在stackoverflow片段工具中導入Rxjs。 :( – Umagon
你可以使用這個模板http://jsbin.com/bumeroq/2/edit?html,js輸出 – martin