2015-01-26 9 views
10

Sto cercando di utilizzare la funzione waitFor di react.js ma sembra che stia facendo qualcosa di sbagliato.React dispatcher WAITFOR

Quello che voglio fare è semplice, attendere che un negozio venga riempito prima di chiamarlo da un altro negozio. 1.Register token nel primo negozio

RipplelinesStore.dispatcherIndex= Dispatcher.register(function(payload) { 
    var action = payload.action; 
    var result; 

    switch(action.actionType) { 

     case Constants.ActionTypes.ASK_RIPPLELINES:  
      registerAccount(action.result); 
      RipplelinesStore.emitChange(action.result);   
      break; 
    } 

}); 

2.Write l'attesa per l'altra negozio

Dispatcher.register(function(payload) { 
    var action = payload.action; 
    var result; 

    switch(action.actionType) { 
     case Constants.ActionTypes.ASK_RIPPLEACCOUNTOVERVIEW: 
      console.log("overviewstore",payload); 
      Dispatcher.waitFor([ 
       RipplelinesStore.dispatcherIndex, 
      ]); 

      RippleaccountoverviewsStore.test= RipplelinesStore.getAll(); 
      console.log(RippleaccountoverviewsStore.test); 

      break; 
    } 

    return true; 
}); 

Purtroppo il mio metodo getall() restituiscono un oggetto vuoto (getAll() è scritto bene). Quindi sembra che la funzione waitFor del dispatcher non funzioni.

Fondamentalmente so che è perché il primo negozio sta ancora ricevendo la risposta dal server ma ho pensato che waitFor avrebbe aspettato che venisse recuperato. Non capisco.

Qualsiasi indizio? Grazie!

Modifica: sparo il primo negozio che preleva come quello. Quello che non capisco è che sto dispacciamento il carico una volta che la mia collezione spina dorsale ha recuperato (I messaggio concernente avere successo con una promessa ...)

ripplelinescollection.createLinesList(toresolve.toJSON()).then(function() { 
      Dispatcher.handleViewAction({ 
       actionType: Constants.ActionTypes.ASK_RIPPLELINES, 
       result: ripplelinescollection 
      }); 
     }); 

Ho anche cercato di impegnare la WAITFOR ad un'azione che non viene mai chiamato ma l'altro negozio non sta ancora aspettando! WEIRD!

+0

Come esattamente si è in recupero che formano il server? I negozi sono sincroni, se si attiva una richiesta all'interno della richiamata del negozio, altri negozi non lo aspettano. –

+0

Lo prendo dal mio controller di azioni, ho modificato il mio post –

+0

Sembra che il tuo codice stia verificando diverse costanti di azione in entrambi i controller. Constants.ActionTypes.ASK_RIPPLELINES, Constants.ActionTypes.ASK_RIPPLEACCOUNTOVERVIEW. –

risposta

9

sembra che il problema sia il recupero asincrono dal server. waitFor non dovrebbe funzionare in questo modo. Dovrai introdurre un'altra azione che viene attivata non appena i dati sono stati ricevuti dal server.

Date un'occhiata a questa risposta: https://stackoverflow.com/a/27797444/1717588

+5

"waitfor" è confuso. Dovrebbe essere chiamato "CheckThisStore", o "GetLastStoreResult" perché in realtà non è "in attesa" di nulla –

+1

Gesù che percorre il cammino di Cristo come una brillante idea di nominare un'API in un modo che suggerisce di fare qualcosa di completamente diverso da ciò che effettivamente fa. .. –