Клуб 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 комментариев
Всеволод Шмыров
20 октября 2016, 13:50
Добрый день. Могли бы собрать пример на jsfiddle.net? 
Всеволод Шмыров,
https://jsfiddle.net/mumus/qnn3j2c5/1/
Всеволод Шмыров
24 октября 2016, 10:21
papuska,
А зачем вы используете promise.all? В вашем коде вы передаете в этот метод массив объектов, который просто прокидываются в then без изменений.
Всеволод Шмыров,


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