Множественное ожидание в железе — маршрутизатор не работает

#javascript #jquery #mongodb #meteor

#javascript #jquery #mongodb #метеор

Вопрос:

У меня есть глобальное ожидание, которое относится к публикации корзины.

Однако на странице корзины я хочу показать список товаров в корзине, в корзине есть массив объектов line_items с идентификаторами списка.

Поэтому мне также нужно подписаться на объявления на странице корзины, чтобы показать их.

Вот что у меня есть до сих пор

 Router.configure({
    layoutTemplate: "layout",
    loadingTemplate: "loading",
    waitOn: function(){
        if(Session.get("cartId"))
            return Meteor.subscribe("cart", Session.get("cartId"));
    }
});
  

Маршрут корзины

 this.route("cart", {
    path: "/cart",
    waitOn: function(){
        if(Session.get("cartId")){
            var line_items = Carts.findOne(Session.get("cartId")).line_items;
            var ids = [];
            for(var i = 0; i < line_items.length; i  ){
                ids.push(line_items[i].listingId);
            }
            return Meteor.subscribe("cartItems", ids);
        }

    }
});
  

Я получаю сообщение об ошибке Не удается прочитать свойство ‘line_items’ из undefined. Я думаю, это происходит потому, что он пытается подписаться до подписки на корзину.

Есть способ это исправить?

Комментарии:

1. Вы можете найти этот пост полезным.

Ответ №1:

Ваша функция ожидания предполагает, что Carts.findOne(Session.get("cartId")) всегда что-то возвращает.

Изначально, когда Meteor загружает ваши данные, они не будут готовы, и вам нужно это учитывать. Вам нужно сначала проверить, существует ли корзина.

 var cart = Carts.findOne(Session.get("cartId"))

if(!cart) return false;

var line_items = cart.line_items;
  

Хотя я не уверен в том, как вы используете обработчики ожидания, поскольку возвращаемым значением всегда должна быть подписка, вам также нужно будет разобраться с тем, что делать, если приведенное выше Carts.findOne() значение возвращает null и if Session.get("cartId") null тоже.

Комментарии:

1. Изменение его на if(Session.get(«cartId») amp;amp; cart) сработало отлично, спасибо!