2017-06-28 2 views
0
läuft

ich eine Aktion, die ein Versprechen zurückgibt (so kann ich einen Ladezustand auf meine Komponente haben)(Vue.js + VUEX) innerhalb Aktion Commit versprechen, nicht

Aus irgendeinem Grund der Commit nicht ausgelöst wird, nichts wird, nachdem der Commit-Linie laufen, keine Fehler als auch

Das ist meine Aktion:

add({ commit }, data) { 
    return new Promise((resolve, reject) => {  
     axios.post('/spaces',data).then(
      response => { 
       commit('ADD_SPACE',response.data); 
       //this line only runs if put before the commit. 
       resolve(response.data); 
      }, 
      error => {     
       reject(error);   
      }); 
    }); 
} 

die Mutation:

ADD_SPACE (state, space) { 
     state.spaces.push(space);   
    } 
+0

Ich sehe nichts falsch mit Ihrer Aktion, können Sie die 'ADD_SPACE' Mutation zeigen und wie Sie die Aktion in Ihrer Komponente versenden –

+0

wenn Sie' console.log (response.data) 'im Erfolgs-Callback, was bekommen Sie ? –

+0

@VamsiKrishna Ich bekomme das Objekt ohne Probleme. Wenn ich die Auflösung vor dem Commit setze, erhält meine Ansicht die 'Antwort' und aktualisiert sie (zeige den Ladezustand nicht mehr an), aber der ADD_SPACE scheint niemals richtig ausgeführt zu werden –

Antwort

0

Ändern der Aktion zu async und haben eine erwarten, anstatt das "neue Versprechen" selbst zu erstellen, löste das Problem. Nun wird der Commit tatsächlich ausgeführt (obwohl keine Fehler auf der ersten Version + Fehler emittiert wurden würde emittiert werden, wenn ich den Namen der zu etwas verpflichten geändert ungültig)

async add({ commit }, space) { 
    return await axios.post('/spaces',space).then(
     response => { 
      commit('ADD_SPACE',response.data);  
      Promise.resolve(response.data);     
     }, 
     error => {     
      Promise.reject(error);   
     });   
}, 

Wenn jemand eine Erklärung für dieses tho hat, als ich den Grund nicht vollständig verstanden habe.

Verwandte Themen