2016-07-17 11 views
0

Ich habe den folgenden Code in Ember 2.6; Ember-Daten 2.6.1DELETE-Anfrage wird abgeschlossen, bevor GET-Anfrage bei FindingRecord und DestroyRecord in Ember

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    activate() { 
     var route = this; 
     var sessionId = localStorage.getItem('sessionId'); 
     if (sessionId) { 
      localStorage.removeItem('sessionId'); 
      this.store.findRecord('session', sessionId).then(function found(session) { 
       session.destroyRecord(); 
       route.transitionTo('index'); 
      }); 
     } else { 
      this.transitionTo('sessions.new'); 
     } 
    } 
}); 

ich ein Logout-Button, die hbs Template-Code hat als:

<li>{{#link-to 'sessions.delete'}}{{fa-icon "fa-lock"}} Logout{{/link-to}}</li> 

Der Route.extend Code ausgeführt wird, wenn/sessions/aufgerufen löschen!

Was ich beobachte ist die Reihenfolge der REST-Anrufe sind:

1) ***DELETE*** http://dozee.me:3000/api/sessions/<sessionId> 
2) ***GET*** http://dozee.me:3000/api/sessions/<sessionId> 

Die zweite REST Anfrage wirft und Fehler, da zu diesem Zeitpunkt die Sitzung/Cookie bereits aufgeräumt wird.

Was ich erwarte, ist die Reihenfolge der REST-Anrufe sollte eigentlich umgekehrt sein, aber ich bin nicht in der Lage, herauszufinden, warum es nicht so ist!

Alle Zeiger & Hinweise geschätzt werden;)

+0

Woher kommt das dann? (Funktion gefunden (Sitzung)? –

+0

'FindRecord' sollte ein Versprechen zurückgeben. Ist es nicht? – Mayank

+1

ja, aber ich sah nie, dass Funktionsaufruf ... deshalb fragte ich .. Was ich tue, ist dies .... dann ((Sitzung) => {...}); wenn Sie ES6 und Fettpfeil verwenden ... so ist die gefundene Funktion extra in Ihrem Beispiel ..es kann so sein als na dann (funktion (session) {} .... probier das ohne ... aber nicht sicher, ob das Benennen einer Funktion einen Unterschied machen würde ... –

Antwort

1

dies sein könnte, weil ember bereits die Sitzung auf dem Speicher hat und das Objekt zu Ihnen zurückkehrt und versuchen, das Objekt zu aktualisieren später einen GET-Anruf über machen.

, die nach dem Löschen auftreten können, weil Versprechen bereits mit Speicherobjekt aufgelöst wurde.

Was Sie tun können, ist suchen Sie nach Session-Objekt im Speicher zuerst mit peekRecord und make findRecord nur aufrufen, wenn Objekt nicht im Speicher gefunden.

Eine andere Möglichkeit wäre, einen Forsed-Server-Aufruf für findRecord for session zu machen, der nicht aufgelöst wird, bis das Objekt vom Server zurückgegeben wird.

Hoffe das hilft dir.

+0

Ausgezeichnet! Danke vielmals. Das hat funktioniert. – Mayank