используя "для ожидания ... of" в реагировать родной - PullRequest
1 голос
/ 14 мая 2019

Я могу запустить приведенный ниже код на узле js как клиент.Это работает, но когда я использую тот же код в реагировать родной, он выдает ниже ошибки.

Требуются циклы, но они могут привести к неинициализированным значениям.Рассмотрите возможность рефакторинга, чтобы устранить необходимость в цикле.2019-05-14 13: 47: 57.271 [ошибка] [tid: com.facebook.react.JavaScript] 'Отклонение необработанного обещания', {[TypeError: _iterator [typeof Symbol === "function"?typeof Symbol === "функция"?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);
    })
  }
})();

фактический вывод представляет собой массив данных.

enter image description here

1 Ответ

0 голосов
/ 14 мая 2019

Мне удалось обойти это с помощью нижеприведенного решения.Вместо того, чтобы полагаться на Бабеля, я использовал решение, приведенное здесь http://exploringjs.com/es2018-es2019/ch_asynchronous-iteration.html#using-asynchronous-iteration-via-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);
}
...