Я хочу остановить второй запрос, отправленный через iron-ajax, еще до того, как будет завершен первый отправленный запрос.

У меня есть API, который занимает 4 минуты (приблизительно) в моем полимерном приложении. Когда я отправляю запрос ровно через 2 минуты, другой запрос отправляется даже после тайм-аута, а для длительности задержки установлено значение 10 минут. Я хочу остановить отправку второго запроса или дождаться завершения первого запроса. Некоторые предлагали мне использовать fetch вместо iron-ajax. Мне нужно исправить в самом iron-ajax. Могу ли я иметь решение для этого.

код идет сюда

<iron-ajax id="request"
       url={{request}}
       verbose
       handle-as="json"
       method="{{method}}"
       body="{{body}}"
       params="{{requestParams}}"
       on-error="onError"
       loading="{{loading}}"
       timeout=600000
       content-type="application/json"
       debounce-duration=600000
       last-error="{{lastError}}"
       last-response="{{lastResponse}}">

I hope this will get resolved. Thanks in advance


person Roopesh Manchanbele    schedule 27.12.2018    source источник
comment
Вы можете использовать Fetch API, который изначально предоставляется всеми браузерами: developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch   -  person Pascal L.    schedule 29.12.2018
comment
@ПаскальЛ. Я также попытался получить, но получил тот же ответ и от этого. это остается в силе, если время, которое вы фиксируете, составляет менее 2 минут.   -  person Roopesh Manchanbele    schedule 04.01.2019
comment
debounce-duration можно установить только для запросов, которые отправляются автоматически.   -  person Roopesh Manchanbele    schedule 04.01.2019
comment
тайм-аут происходит в установленное вами время, но еще до этого на сервер будет отправлен новый запрос.   -  person Roopesh Manchanbele    schedule 04.01.2019


Ответы (1)


Вы можете установить логическую переменную, чтобы иметь возможность вызывать this.$.request.generateRequest() что-то вроде:

ДЕМО

static get properties() {return {
    _isRequest: {
         type: Boolean,
         value: true}}}

static get observers(){ return ['_checkLastResponse(lastResponse)'] }

__checkLastResponse(r) {
        // we have received a response from iron-ajax so allow for next call
        if (r) this._isRequest = true;}

// As you provided above code, you call ajax manually. 
_ajax_call() {
      if (this._isRequest) {
              this.$.request.generateRequest();
              this._isRequest = false; }
}

static get template() { return `
   <paper-button disabled="[[!_isReruest]]" on-tap="ajax_call">AJAX CALL</paper-button>
   .......
   `;}

Таким образом, вы можете удалить ненужные свойства, такие как debounce-duration=600000 и т. д.

person HakanC    schedule 29.12.2018
comment
HakanC. Спасибо за решение. Да debounce-duration в этой сцене совсем не нужен, так как его будет хорошо использовать только в том случае, если запрос будет отправлен автоматически, а не вручную. Я попробую, как вы посоветовали, и сообщу вам результат. - person Roopesh Manchanbele; 04.01.2019