Нужно сделать так чтобы клиент ждал ответа от сервера. Внутри блока socket.on(...) quest_data выдает желанный массив, за пределами блока выдает undefined.
Код клиента
var socket = io("http://localhost:3000");
var quest_data = [];
var answ_data = [];
function getAnswers(){
//Поиск вопросов
var quest = document.getElementsByClassName("qtext");
//Запаковка их в объект
var data = {
questions: []
}
for(var i = 0;i<quest.length;i++) {
data.questions[i] = quest[i].innerHTML;
}
console.log(data);
//Отправка на сервер
socket.emit("gimmeQA",data);
console.log("Вопросы отправлены");
console.log("Ждем ответа");
//Получение ответов с сервера
socket.on("gimmeQA",function(data){
var my_json = JSON.parse(data);
quest_data = my_json.questions;
answ_data = my_json.answers;
console.log("Данные получены");
console.log(quest_data); //Получен массив вопросов
});
}
getAnswers();
console.log(quest_data); //undefined
Код сервера node.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var fs = require("fs");
io.on('connection', function(socket){
console.log('a user connected');
socket.on("disconnect",function(){
console.log("user disconnected");
});
socket.on('gimmeQA', function(json_obj) {
console.log('Запрос правильных ответов');
socket.emit("gimmeQA", findAnswers(json_obj));
console.log("Ответ отправлен");
});
Решил проблему через Promises
Вот решение:
var socket = io("http://localhost:3000");
var quest_data = [];
var answ_data = [];
let getAnswers = function(){
//Поиск вопросов
var quest = document.getElementsByClassName("qtext");
//Запаковка их в объект
var data = {
questions: []
}
for(var i = 0;i<quest.length;i++) {
data.questions[i] = quest[i].innerHTML;
}
console.log(data);
//Отправка на сервер
socket.emit("gimmeQA",data);
console.log("Вопросы отправлены");
console.log("Ждем ответа");
//Получение ответов с сервера
return new Promise(function(resolve,reject){
socket.on("gimmeQA",function(data){
var my_json = JSON.parse(data);
quest_data = my_json.questions;
answ_data = my_json.answers;
console.log("Данные получены");
resolve("resolve")
});
});
}
getAnswers().then((msg) => {
console.log("ура " + msg);
console.log(quest_data);
});
Исправил код теперь работает как надо.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Сделал небольшой редактор изображений для изучения возможностей vuex с состояниями
Скорее всего скрипт, но как понимаю, есть варианты с использованием обращений к БД, либо без негоХотелось бы конечно без, но в чем плюсы с БД и различия...
На данный вопрос уже ответили: