У меня есть обещание, которое разрешает объект JSON с некоторыми данными конфигурации. Я хочу получить доступ к этим данным после нажатия кнопки «отправить конфигурацию» в моем HTML-клиенте. общение осуществляется через соединение websocket в nodejs. таким образом, сервер websocket получает сообщение «отправить конфигурацию» от клиента, и сервер должен ответить конфигурацией.
showMsg = function (MSGOBJ) {
var parsedOBJ = JSON.parse(MSGOBJ);
//console.info(parsedOBJ.content);
for (var i = 0; i < connections.length; i++) {
switch(parsedOBJ.type) {
case "text":
console.info("Received: " + parsedOBJ.content)
connections[i].sendUTF('{ "type":"text", "content":"Server ready."}')
break;
case "config":
console.info("Received:1 " + parsedOBJ.content)
console.info("Sending config" )
var getConfig = KRequests.getKConfig;
var configOBJ;
getConfig.then(function(result) {
configOBJ = result
});
connections[i].send('{ "type":"config", "content":'+JSON.stringify(configOBJ)+'}');
break;
}
}
}
Я знаю, что configOBJ будет неопределенным, если я буду использовать его вне цепочки, но просто чтобы дать вам представление о том, что я хочу делать. а также, если я перемещу send () внутри цепочки, это вызовет следующую ошибку: «UnhandledPromiseRejectionWarning: TypeError: невозможно прочитать свойство send из undefined»





У вас есть две проблемы, первая из которых заключается в том, что вы должны использовать:
getConfig.then(function(result) {
console.info(connections[i])
connections[i].send('{ "type":"config", "content":'+JSON.stringify(configOBJ)+'}');
});
Другой заключается в том, что:
for (var i = 0; i < connections.length; i++) {
должно быть:
for (let i = 0; i < connections.length; i++) {
Или, если у вас нет let, который вам нужен, если вы используете недавний узел, который поддерживает больше, чем ES5. Вам придется использовать такой IIFE:
for (var i = 0; i < connections.length; i++) {
(function (i) {
// put the loop body here
})(i);
}
См. Понимание let и const в JavaScript ES6
когда я помещал функцию send () до того, как я изменил цикл, чтобы «позволить i» внутри моей цепочки, это выдало бы мне эту ошибку «UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'send' of undefined». вы можете помочь мне понять, в чем разница? Благодарность