2016-10-27 4 views
0

Я новичок в FLUX, и у меня проблема с обработкой ajax в FLUX.Как обрабатывать ответ ajax в FLUX

Моя ситуация следующая:

меня файлу commentAPI.js

//all js files are compiled from coffescript 

// fetching all comments from server 
    _fetchComments: function() { 
     var promise; 
     promise = $.ajax({ 
     url: "comments/show", 
     type: "GET", 
     dataType: "json" 
     }); 
     return promise.then(function(response) { 
     // here should be any action ? 
     }, function(error) { 
     return console.log(error); 
     }); } 

Тогда я commentActions.js

fetchComments: function() { 
    allcomments=commentAPI._fetchComments(); 
    return Dispatcher.dispatch({ 
     actionType: ActionTypes.ALL_COMMENTS, 
     comments: allcomments 
    }); 
    } 

Этот код фактически не работает, потому что функция _fetchComments calle d в commentActions.js возвращение целиком.

Что я хочу сделать: Я хотел бы получить ответ от Ajax функции обратного вызова и передать результат моего объекта полезной нагрузки, а затем направить его диспетчером в моих _fetchComments() функции в commentActions.js

Как наилучшим образом это сделать? Как я могу получить доступ к ответной функции функции обратного вызова ajax?

ответ

0

Вы должны послать _fetchComments функцию и, когда это обещание не будет решена, вызовите Действие fetchComments.

В коде реакции вы должны вызывать функцию асинхронизации (т. Е. _fetchComments).

В вашем примере:

// fetching all comments from server 
    _fetchComments: function() { 
     var promise; 
     promise = $.ajax({ 
     url: "comments/show", 
     type: "GET", 
     dataType: "json" 
     }); 
     return promise.then(function(response) { 
     // put the sync action here 
     fetchComments(response) 
     }, function(error) { 
     return console.log(error); 
     }); } 

И не забудьте удалить его из действия (т.е. fetchComments)

+0

Если я хорошо понимаю. .. Мне нужно вызвать действие fetchComments в части кода, где обещано решение, и позволяет сказать, что я знаю, как обновлять свой магазин, а затем я не вызываю метод fetchComments в своих компонентах верхнего уровня, но вместо этого я вызываю свой метод async _fetchComments()? – Morty

+0

Что-то в этом роде. Вы должны отправить асинхронное действие (_fetchComments) из компонента, то есть как оно вызывается. [См. Здесь действия async сокращения] (http://redux.js.org/docs/advanced/AsyncActions.html#async-action-creators) – mimsugara

Смежные вопросы