Клуб API Карт

Возможно ли получить дополнительные данные через promise?

papuska
19 октября 2016, 11:37

Возможно ли через vow получить кроме объекта promise дополнительные данные? В данном примере data это некие данные, которые мне нужно будет использовать на карте которые я получаю аяксом.

ymaps.vow.all($.map(data, function(j, i){
    return {
        data: j,
        route: new ymaps.route([j.coordinates_start.split(',').map(Number), j.coordinates_finish.split(',').map(Number)])
    }
})).then(function(result){
        $.each(result, function(i, j) {
            var data = j.data;
            var route = j.route;

            var points = route.getWayPoints();
            points.options.set('preset', 'islands#darkBlueStretchyIcon');
            points.get(0).properties.set('iconContent', data.id +': Старт');
            points.get(1).properties.set('iconContent', data.id +': Финиш');
            routes_collection.add(route);
});

Если да, то почему-то маршруты не добавляются на карту.

5 комментариев
Подписаться на комментарии к посту
Добрый день. Могли бы собрать пример на jsfiddle.net? 
v.shmyroff,
https://jsfiddle.net/mumus/qnn3j2c5/1/
papuska,
А зачем вы используете promise.all? В вашем коде вы передаете в этот метод массив объектов, который просто прокидываются в then без изменений.
v.shmyroff,


https://yandex.ru/blog/mapsapi/vyvod-neskolkikh-marshrutov-na-karte
Вот для этого
papuska,
В вашем коде promises.all используется неправильно. all ожидает другие промисы. Вы же передаете обычные объекты, с промисом в поле. Получается, что вызов then промиса происходит до получения данных маршрутов.
Никакого стандартного интерфейса для передачи данных через promise.all не предусмотрено. Так как это все же служебный интерфейс, который решает другие задачи.
Чтобы решить вашу задачу нужно или обращаться по id/индексу к какому-нибудь обзему хранилищу. Ну или можно в promise.all передать в начале маршруты, а потом данные и учитывать это при парсенге.