Подтвердить что ты не робот

Polymer 1.0: Несколько вызовов метода send() запроса железа

У меня есть компонент, который использует экземпляр <iron-ajax> для извлечения данных из back-end, и я хотел бы использовать <iron-request> для отправки обновлений, таких как запросы POST/DELETE.

Все работает отлично в первый раз. Однако, если запрос снова вызван, я получаю сообщение об ошибке:

Uncaught TypeError: Невозможно прочитать свойство 'then' из undefined

Мое определение шаблона выглядит так:

...
<iron-ajax id="ajax" auto verbose
    url="/cart-api/"
    last-response="{{ajaxResponse}}"
    handle-as="json">
</iron-ajax>

<iron-request id="xhr"></iron-request>
...

В моем компоненте script я использую метод send() <iron-request> для отправки POST:

var me = this;
this.$.xhr.send({
    url: "/cart-api",
    method: "POST",
    body: JSON.stringify(entry)
}).then(function() {
    me._refresh();
}, function() {
    console.error("POST failed");
});

Сообщение об ошибке указывает, что send вернул undefined, а не действительный объект Promise.

Итак, мой вопрос заключается в следующем: является ли элемент <iron-request> действительно многоразовым? Нужно ли мне что-либо делать, чтобы обновить или повторно инициализировать его?

UPDATE

Благодаря @Zikes я обновил свой код следующим образом:

<iron-ajax id="ajaxGet" auto
    url="/cart-api/"
    last-response="{{ajaxResponse}}"
    handle-as="json">
</iron-ajax>

<iron-ajax id="ajaxPost" url="/cart-api" method="POST" on-response="_refresh"></iron-ajax>

<iron-ajax id="ajaxDelete" method="DELETE" on-response="_refresh"></iron-ajax>
insertEntry: function(entry) {
    this.$.ajaxPost.body = JSON.stringify(entry);
    this.$.ajaxPost.generateRequest();
},

_handleRemove: function(e) {
    var entry = e.currentTarget.entry;
    this.$.ajaxDelete.url = "/cart-api/" + entry.id;
    this.$.ajaxDelete.generateRequest();
},

_refresh: function() {
    this.$.ajaxGet.generateRequest();
},
4b9b3361

Ответ 1

Компонент <iron-ajax> создает новый <iron-request> для каждого сделанного нового запроса: https://github.com/PolymerElements/iron-ajax/blob/master/iron-ajax.html#L442

Если вы ищете возможность повторного использования (и другие приятные функции, такие как debounce), вам, вероятно, будет лучше использовать компонент <iron-ajax>.