В моем файле JS у меня есть следующий codigo
...
function get_estados_encuestas(this_, options, validador = null) {
var buttonsPoll = '<div class="wizard-buttons">';
$.get('home/get_estados', function(data) {
$.each(data, function(index, item) {
var selected = '';
if (validador != null && validador === item['est_id']) {
selected = 'selected';
}
//$(selector).append(`<option value="${item['est_id']}" ${selected}>${item['est_nombre']}</option>`);
buttonsPoll += `<a class="" role="button" style="float: left">${item['est_nombre']}</a>`;
});
buttonsPoll += `<a class="wizard-finish" href="#${this_.id}" data-wizard="finish" role="button" style="float: right">${options.buttonLabels.finish}</a>`;
});
buttonsPoll += '</div>';
console.log(buttonsPoll)
}
ПРОБЛЕМА
Когда я пробую возвращать переменную buttonPoll
Только меня возвращает то, что снаружи get
, и не то, что я прилагаю внутри get
потому что оно последует за этим, и поскольку он мог бы решать это?
Я благодарен за интерес
Только тебе показывает то, что вне $.get
, потому что он асинхронный, console.log()
выполнено до того, как get закончился.
soluciГіn в это состоит в том, чтобы использовать callback, или помещать console.log внутри get, так как то, что он скроллирует внутри того же самого, не является асинхронным.
TambiГ©n podrГ-схвати использовать одну Promise
, я оставляю тебе пример:
let promise = new Promise((resolve, reject) => {
$.get('home/get_estados', function(data) {
$.each(data, function(index, item) {
var selected = '';
if (validador != null && validador === item['est_id']) {
selected = 'selected';
}
//$(selector).append(`<option value="${item['est_id']}" ${selected}>${item['est_nombre']}</option>`);
buttonsPoll += `<a class="" role="button" style="float: left">${item['est_nombre']}</a>`;
});
buttonsPoll += `<a class="wizard-finish" href="#${this_.id}" data-wizard="finish" role="button" style="float: right">${options.buttonLabels.finish}</a>`;
});
});
promise.then((successMessage) => {
buttonsPoll += '</div>';
console.log(buttonsPoll)
});
, Если ты нуждаешься в большем количестве info promises, они обрежь находить acГЎ https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Promise
TenГ©s, что изменять контекст, откуда ему верит в нее funciГіn, что манипулирует результатом Promise:
function get_estados_encuestas(this_, options, validador = null) {
var buttonsPoll = '<div class="wizard-buttons">';
function handlerEach(index, item) {
var selected = '';
if (validador != null && validador === item['est_id']) {
selected = 'selected';
}
buttonsPoll += `<a class="" role="button" style="float: left">${item['est_nombre']}</a>`;
}
function handlerGet(data) {
$.each(data, handlerEach);
buttonsPoll += `<a class="wizard-finish" href="#${this_.id}" data-wizard="finish" role="button" style="float: right">${options.buttonLabels.finish}</a>`;
}
$.get('home/get_estados', handlerGet);
buttonsPoll += '</div>';
console.log(buttonsPoll)
}
Есть другие способы менять контекст tambiГ©n.
Проблема состоит в том, что не estГЎs имея в виду cГіmo функционирует она funciГіn $ .get (), Г©sta он работает способа asГ-ncrona а следовательно ты в ней funciГіn get то, что ты показываешь, является маршрутом, где находится ресурс, который нужно получать (url) и quГ© делать как только peticiГіn был отвечен ее. ОН quГ© делать знает себя как обещание, она funciГіn $ .get () обещает тебе, что он будет выполнять ее funciГіn, который ты переместил его, когда он получит попросивший ресурс.
ты Должен иметь в виду, что она ejecuciГіn рукописного шрифта он не задерживается когда ждут из-за ответа (allГ - что $ .get () был asГ-ncrona), из-за которого asГ - как estГЎ ты cГіdigo то, что ты показываешь:
В твоем случае ты можешь стрелять просто в процесс, который получает ресурс, и когда к тебе прибудут данные, обрабатываешь дату:
function get_estados_encuestas(this_, options, validador = null) {
$.get('home/get_estados', function(data) {
var buttonsPoll = '<div class="wizard-buttons">';
$.each(data, function(index, item) {
var selected = '';
if (validador != null && validador === item['est_id']) {
selected = 'selected';
}
//$(selector).append(`<option value="${item['est_id']}" ${selected}>${item['est_nombre']}</option>`);
buttonsPoll += `<a class="" role="button" style="float: left">${item['est_nombre']}</a>`;
});
buttonsPoll += `<a class="wizard-finish" href="#${this_.id}" data-wizard="finish" role="button" style="float: right">${options.buttonLabels.finish}</a>`;
buttonsPoll += '</div>';
console.log(buttonsPoll)
});
}