首页 > 解决方案 > 使用 saga 生成器从 phoenix socket push 获取响应数据

问题描述

我将 redux-saga 与 phoenix.js 套接字一起使用,并希望在推送后获取响应数据。

export function* make({ channel }, action) {
  try {
    const q = yield apply(channel, channel.push, ["create", action.payload, 10000]);
  } catch() {
  }
}

我还看到receivedResp了 obj 中的键q:console.log(Object.keys(q)); // ["channel", "event", "payload", "receivedResp", "timeout", "timeoutTimer", "recHooks", "sent", "ref", "refEvent"]

但无法访问像 `q.receivedResp.response.data' 这样的数据。但是 console.log({ q }) 向我展示了一些。

在这种情况下实际是什么q以及如何获取响应数据

标签: socketsgeneratorphoenix-frameworkredux-sagaphoenix

解决方案


我通过promisify push发现了

export const promisifyPush = (channel, ...args) => {
    return new Promise((resolve, reject) => {
      channel.push(...args)
        .receive("ok", function (data) {
            console.log({ data  })
            resolve(data);
        })
        .receive("error", function (reasons) {
            reject({ channel: channel.topic, reasons })
        })
        .receive("timeout", function (error) {
            reject(error)
        });
    });
  };

推荐阅读