Клуб API Карт

geoQuery и методы remove* (add*)

sayunot
11 июля 2016, 08:51

никак не могу понять принцип работы методов remove* и add* у geoQuery. например, есть код:

var res = ymaps.geoQuery( yMap.geoObjects) // как понимаю, забираем все объекты типа geo с текущей копии карты 
                .removeFrom(yMap.geoObjects); // тут, по идее, чистим полностью результат geoQuery, загоняем результат в переменную 
        
        res.then(() => {
              console.log('remove:' + yMap.geoObjects.getLength() + ", but res:" + res.getLength());
        }).add(new ymaps.Polyline([[25, 65], [35, 66], [34, 62], [34, 63]])) // добавляем новый объект в результат
        .then(() => {
              console.log('add:' + yMap.geoObjects.getLength() + ", but res:" + res.getLength());
        }).addTo(yMap.geoObjects) // выводим результат в коллекцию geo-объектов 
        .then(() => {
              console.log('addTo:' + yMap.geoObjects.getLength() + ", but res:" + res.getLength());
        });

прогоняем этот код раза 4, в результате ждем такое поведение:

1.  geoQuery, затем вызов removeFrom => результат пустой, однако вывод в консоль "remove:4, but res:3". откуда объекты в результате geoQuery после вызова removeFrom, если и в качестве источника, и в качестве удаляемой коллекции используется yMap.geoObjects? не пойму.

2.  add => должен добавиться новый объект в результат, но в консоле "add:4, but res:3". почему 3, а не 1?

3. addTo => в коллекции yMap.geoObjects должен добавиться результат geoQuery, однако в консоле "addTo:4, but res:3", т.е. с момента вызова removeFrom ничего не изменилось. 

явно че-т не понимаю (

1 комментарий
Подписаться на комментарии к посту
.then это метод Promise A+ (АПИ использует vow)
Обработчик в .then выполняется асинхронно, а объекты вы добавляете синхронно.
Когда отработает console.log в первом .then, вызовы .add и .addTo уже выпонятся


Нет никакого смысла использовать then для синхронных операций