Получите ценность от обратного вызова

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

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

let documents = [];

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

  console.info(documents); // empty Array

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
56
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

let documents = await socket.on('echo', async function(documents, data){
    console.info(documents); 
    return data; 
  });

console.info(documents); 

это выглядит как отличная идея :)

equaliser 28.05.2019 16:19

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

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

Ответ принят как подходящий

Сначала нужно кое-что понять. Когда это запускается, то, что находится внутри обратного вызова, не запускается, сервер будет генерировать это событие, в вашем случае «эхо».

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

Что-то вроде этого:

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

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

Конечно, вы также можете избавиться от async/await.

хороший. но как мне его вернуть тогда? У меня есть эта дыра в функции и мне нужно вернуть ее из функции javascript const manageDocuments = (documents) => { // I what to return these data return documents; } Можно ли сделать так? Я пытался, но когда я console.info(manageDocuments) не вижу данные, я вижу только manageDocuments() как результат. Я думаю, это потому, что, как сказал @ Хоакин Ромеро Франко

equaliser 28.05.2019 16:21

Что именно ты пытаешься сделать? Дайте мне точный код или попробуйте объяснить немного лучше, и я вам помогу :)

emcee22 30.05.2019 08:07

Я сделал это так: D javascript socket.on('echo', async function(documents, data){ documents.push(data); }); Я обнаружил, что push работает в обратном вызове :)

equaliser 30.05.2019 12:36

Другие вопросы по теме