【问题标题】:How to use Promise with redux and socket.io如何在 redux 和 socket.io 中使用 Promise
【发布时间】:2017-07-30 04:42:09
【问题描述】:

我是 react-redux 的新手。我陷入了向服务器发出动作的情况。服务器反过来发出一个返回承诺的第三方 API 请求。我用于处理服务器中套接字连接的 server.js 文件如下所示

import Server from 'socket.io';

export default function startServer(store) {
    const io = new Server().attach(8090);

    store.subscribe(
        () =>io.emit('curr_news', store.getState().toJS()));

    io.on('connection', (socket) => {
        socket.emit('curr_news', store.getState().toJS());
        socket.on('action', store.dispatch.bind(store));
    });
}

正如您所见,动作是客户端发出的,服务器在收到必要的动作后发出适当的请求,然后发出当前状态。下面是一个reducer文件示例

export default function reducer(curr_feeds = CURRENT_FEEDS, action) {
         switch (action.type) {
          case 'GET_TEST1DATA':
            return getTest1data(curr_feeds);
          case 'GET_TEST2DATA':
            return getTest2data(curr_feeds);
        }
}

这里的 getTest1data 和 getTest2data 在向某个第三方 API 发出请求时实质上会返回一个承诺。我的问题是,由于套接字立即发出 curr_news,因此 store.getState() 的值未定义。

我的问题是,一旦承诺解决而不是在那之前,我如何让商店观察并发出套接字?提前感谢您的帮助。

【问题讨论】:

    标签: node.js websocket redux react-redux


    【解决方案1】:

    当您订阅商店时,您会在更新时获得一个状态。如果这个新状态是一个承诺,你可以处理它:

    Store.subscribe(state => state.then(promisedData => io.emit(promisedData))
    

    【讨论】:

    • 感谢您的回复。我得到无法读取未定义的属性'then'。我是否应该在代码中添加一些内容以便定义状态。
    • 我将代码更改为store.subscribe( () => { store.getState().then(data => io.emit('curr_news', data.toJS())); } ),它对我有用
    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 2017-05-13
    • 2018-02-21
    • 2018-11-14
    相关资源
    最近更新 更多