public static object fetchMessages(string channelId, string currOldestMessageId, bool isFirstLoad) { return(new ThunkAction <AppState>((dispatcher, getState) => { return MessageApi.FetchMessages(channelId: channelId, currOldestMessageId: currOldestMessageId) .Then(messagesResponse => { var messageIds = new List <string>(); var messageDict = new Dictionary <string, Message>(); var channelMessageList = getState().messageState.channelMessageList; var channelMessageDict = getState().messageState.channelMessageDict; if (channelMessageList.ContainsKey(channelId) && !isFirstLoad) { messageIds = channelMessageList[channelId]; } if (channelMessageDict.ContainsKey(channelId) && !isFirstLoad) { messageDict = channelMessageDict[channelId]; } var userMap = new Dictionary <string, User>(); messagesResponse.items.ForEach(message => { if (message.deletedTime == null && message.type == "normal") { if (messageIds.Contains(message.id)) { messageIds.Remove(message.id); } messageIds.Add(message.id); if (messageDict.ContainsKey(message.id)) { messageDict[message.id] = message; } else { messageDict.Add(message.id, message); } } if (userMap.ContainsKey(message.author.id)) { userMap[message.author.id] = message.author; } else { userMap.Add(message.author.id, message.author); } }); dispatcher.dispatch(new UserMapAction { userMap = userMap }); dispatcher.dispatch(new FetchMessagesSuccessAction { isFirstLoad = isFirstLoad, channelId = channelId, messageIds = messageIds, messageDict = messageDict, hasMore = messagesResponse.hasMore, currOldestMessageId = messagesResponse.currOldestMessageId }); }) .Catch(error => { dispatcher.dispatch(new FetchMessagesFailureAction()); Debuger.LogError(message: error); }); })); }