Получите ценность от обратного вызова - PullRequest
0 голосов
/ 27 мая 2019

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

Я пытаюсь вернуть ожидаемый массив в предопределенный.

let documents = [];

  socket.on('echo', async function(documents, data){
    documents = await data;
    console.log(documents); // shows me, what I want to see
  });

  console.log(documents); // empty Array

Мне нужен результат в моем предопределенном массиве documents

Я прочитал несколько Тутов, но не понял. Я знаю, на stackoverflow это пропускается несколько раз. Но все темы кажутся более сложными, чем моя ситуация. Поэтому я надеюсь, что это станет более сложным.

Ответы [ 3 ]

2 голосов
/ 27 мая 2019

Вы должны сначала что-то понять. Когда он запускается, то, что находится внутри функции обратного вызова, не запускается, если сервер генерирует это событие, в вашем случае 'echo'.

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

Примерно так:

const manageDocuments = (documents) => {
    // do what you want with documents array
    console.log(documents);
}

socket.on('echo', async function(documents, data){
    documents = await data;
    manageDocuments(documents);
});

Конечно, вы также можете избавиться от асинхронности / ожидания

2 голосов
/ 27 мая 2019
let documents = await socket.on('echo', async function(documents, data){
    console.log(documents); 
    return data; 
  });

console.log(documents); 
1 голос
/ 27 мая 2019

Проблема в том, что код вне функции сокета выполняется с пустым массивом, потому что выполняется только один раз во время выполнения.

Если вы хотите иметь доступ к документам внутри функции сокета, которую вы должны выполнить, сохраните ее или используйте socket.on внутри другого цикла.

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