функция forEach не работает в событии tcp - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь использовать функцию forEach () в библиотеке узла js net в моем событии tcp, но она не в состоянии выполнить то, что идет не так

Я сделал асинхронную функцию для замены forEach (), но она все равно не будет работать, даже если я знаю, что функция вызывается

async function asyncForEach(array, callback) {
  console.log('async function')
  for (let index = 0; index < array.length; index++) {
    await callback(array[index], index, array);
  }
}

ничего не происходит, кроме ожидаемых console.logs, вот как я использую функцию

sock.on('data',function(data){
  var data = Buffer.from(data).toString();
  var arg = data.split(',');
  var event = arg[0];

  if(event == 'stdout'){
    console.log('stdout')
    asyncForEach(controlClients, async (num) => {
      await waitFor(50);
      console.log(num);
    });
  }
});

Я ожидаю возврата каждой строки массива здесь, чтобы я мог что-то сделать для выбранного элемента ControlClient, любая помощь?

1 Ответ

0 голосов
/ 21 января 2019

Немного трудно понять, каково ваше полное окружение. Когда я запускаю этот код:

const waitFor = (ms) => new Promise(r => setTimeout(r, ms));

async function asyncForEach(array, callback) {
  console.log('async function')
  for (let index = 0; index < array.length; index++) {
    await callback(array[index], index, array);
  }
}

let controlClients = [1,2,3,4];

function test() {
    console.log('stdout')
    return asyncForEach(controlClients, async (num) => {
      await waitFor(50);
      console.log(num);
    });
}

test().then(() => {
    console.log("done");
}).catch(err => {
    console.log(err);
});

Я получаю этот вывод:

stdout
async function
1
2
3
4
done

Надеюсь, вы можете взять это за отправную точку и выяснить, что происходит не так в вашей конкретной среде. Обратите внимание, что вы всегда должны иметь .catch() практически для любой операции, которая включает обещание, чтобы вы могли видеть, есть ли какие-либо ошибки в вашей цепочке обещаний.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...