2015-05-08 2 views
0

У меня есть небольшое приложение responseJS в архитектуре Flux. Мне нужно получить данные на стороне сервера при каждом нажатии кнопки. Я пишу код в магазине, как этиОбработка данных сервера ReactJs

var pieDataForMembers=[]; 
    var ReportStore = assign({}, EventEmitter.prototype, { 
     reportMemberList : function(reportMemberDetails){ 
     ob.projectMember(reportMember,function(getMembersEffort){ //ajax call 
       pieDataForMembers = getMembersEffort; 
      }); 
     return pieDataForMembers; 
    }} 

Но когда я запускаю этот код он не ждет данных сервера и возвращать всегда NULL значения.

ответ

2

Оператор возврата всегда будет возвращен до того, как ob.projectMember выполнит обратный вызов. Вот как работает javascript. Он будет выполняться до конца блока (возвращая значение, которое в настоящий момент равно null), а затем сделать вызов ob.projectMember, а затем через некоторое время запустить ответный ответ.

Вы должны принять заявление о возврате, оно не служит никакой цели. Любые действия, которые необходимо выполнить с результатом сервера, должны выполняться в анонимной функции, которую вы передаете, в качестве обратного вызова выполните ob.projectMember.

Если вы следуете методу потока, тогда вы должны сделать свой api-вызов из своего действия, а затем с ответом от сервера в своем действии вы должны отправить результат диспетчеру, который затем отправит его в магазин.

Если вы хотите продолжать работу с тем, как вы это сделали (например, сделать вызов сервера/api из Магазина), вам нужно, чтобы магазин сообщил Компоненту. Обычно это делается путем испускания события, но вы не ввели какой-либо такой код в свой вопрос. Так что вы делаете, я верю, что не совсем правильно.