2

我能够作为客户端在节点 js 上运行以下代码。它可以工作,但是当我在 react-native 中使用相同的代码时,它会抛出以下错误。

要求循环是允许的,但可能导致未初始化的值。考虑重构以消除对循环的需求。2019-05-14 13:47:57.271 [错误][tid:com.facebook.react.JavaScript]'未处理的承诺拒绝',{ [TypeError:_iterator [typeof Symbol ===“function”?typeof 符号 === "函数" ? Symbol.iterator : "@@iterator" : "@@iterator"] 不是函数。(在 '_iteratortypeof Symbol === "function" ? typeof Symbol === "function" ? Symbol.iterator : "@@iterator" : "@@iterator"', '_iterator[typeof Symbol === "function" ? typeof Symbol === "function" ? Symbol.iterator : "@@iterator" : "@@iterator"]' 未定义)]

我尝试添加以下模块,但它们都不起作用

npm install --save @babel/polyfill es6 polyfill

import asyngularClient from 'asyngular-client';

let socket = asyngularClient.create({
  port: 8000
});

(async () => {
  let channel = socket.subscribe(inboxChannel, { customData: 'yiyiyi?' });

  for await (let data of channel) {
    // ... Handle channel data.
    console.log('channel: ', inboxChannel, data);
    const messages = [];
    data.forEach(d => {
      messages.unshift(d);
    });
    messages.forEach(m => {
      console.log(m.content);
    })
  }
})();

实际输出是一个数据数组。

在此处输入图像描述

4

1 回答 1

2

我能够通过以下解决方案解决它。我没有依赖 Babel,而是使用了此处提供的解决方案(通过 Babel 使用异步迭代)。

let channel = await socket.subscribe(inboxChannel, { customData: 'yiyiyi?' });
const iterator = channel[Symbol.asyncIterator]();
const result = [];
while (result.length < Infinity) {
    const { value, done } = await iterator.next();
    if (done) break;
    result.push(value);
    console.log(value);
}
于 2019-05-14T20:46:05.313 回答