Ich baue ein Werkzeug mit React und Redux. Ich verwende whatwg-fetch, um einen Server-Seitenaufruf zu machen und einige Daten zu holen. Und ich habe einen Reduzierer, dessen Speicher in einem Rückruf erstellt wird, nachdem die Daten erfolgreich abgerufen wurden. Hier ist mein Code:Gibt es eine Möglichkeit, eine JavaScript-Exportanweisung mit einiger Verzögerung auszuführen?
import {createStore} from 'redux';
import 'whatwg-fetch';
let notificationCardList = [],
initialState,
store;
const fetchData =() => {
fetch('http://localhost:6767/file/data.json')
.then((response) => response.json())
.then((responseData) => {
notificationCardList = Object.keys(responseData).map(key => responseData[key]);
})
.then(initializeReducer);
}
const initializeReducer =() => {
initialState = {
notifCardsToBeDisplayed: notificationCardList,
notifCardToBeDisplayed: null
};
function manipulateNotificationCards (state = initialState, action) {
switch (action.type) {
case 'OPEN_CARD':
return Object.assign(state, {
notifCardsToBeDisplayed: null,
notifCardToBeDisplayed: action.card,
notifCardsContainerPreviousState: action.notifCardsContainerCurrentState
});
case 'DISPLAY_CARD_LIST':
return Object.assign(state, {
notifCardsToBeDisplayed: action.cards,
notifCardToBeDisplayed: null
});
default:
return state;
}
}
store = createStore(manipulateNotificationCards);
}
fetchData();
export {store, notificationCardList};
Aber da der Speicher als Teil des Rückrufs erstellt werden, aufgrund asynchronen Verhalten der Export-Anweisung wahrscheinlich ausgeführt zu werden, bevor die creates() Aussage, daher bin ich effektiv einen undefinierten 'Store' exportieren. Ich habe darüber nachgedacht, die Export-Anweisung auch in den Callback zu stellen, aber Export-Statements können nur auf der obersten Ebene existieren. Ich habe auch versucht mit setTimeout(), aber das hat auch nicht funktioniert. Gibt es eine Möglichkeit, "Speicher" zu exportieren, nachdem es erstellt wurde?
Das Problem ist, dass ich nicht die Export-Anweisung in einem Rückruf platzieren können, wie JavaScript, dass nicht zulässt. So wird mein "Geschäft" immer exportiert, bevor ihm ein Wert zugewiesen wird. Meine Frage ist, ob ich die Export-Anweisung irgendwie mit einer Verzögerung ausführen kann, um Zeit für die Ausführung des Callbacks bereitzustellen. –
@RajarshiChakrabarti - Ich habe nicht gesagt, den Export in einen Rückruf zu setzen. Ich sagte, ein Versprechen zu exportieren oder eine Funktion zu exportieren, die einen Rückruf annimmt. Sie können die Exportanweisung nicht mit einer Verzögerung ausführen. Sie müssen Ihren Code neu strukturieren, damit der Aufrufer auf den Wert wartet. Und Sie können entweder den Anrufer einen Callback in eine Modulfunktion übergeben lassen, und dieser Callback wird aufgerufen, wenn der Wert bereit ist, oder Sie haben den Aufrufer eine Zusage holen, dass sie einen '.then()' Handler an diesen anhängen können aufgerufen, wenn der Wert bereit ist. – jfriend00
@RajarshiChakrabarti - Beispiele hier: http://stackoverflow.com/questions/34962075/how-to-async-require-in-nodejs/34962383#34962383 – jfriend00