2016-09-18 2 views
1

Я новичок в JS и немного не знаю о асинхронной программе и обещаю. У меня есть проблемы в получении результата от почтового PHP, как написано в этом коде:Javascript - Используя обещание для публикации PHP, получите неопределенный результат

showModalLink = function(d, i) { 
$('#myModalLabel').text(d.source.name + ' - ' + d.target.name); 
$('#modalJum').text(d.jumlahlelangsama); 
var lelang = d.daftarlelangsama.split(", "); 
var lelangmodal = []; 
var promises = []; 
for (var i = 0; i < lelang.length; i++) { 
    querystring = "select pemenang from lelang where id = " + lelang[i]; 
    console.log(querystring); 
    var queryobj = { 
     query: querystring 
    }; 
    promises.push($.post('indikasi3modal.php', queryobj)); 
} 
Promise.all(promises).then(function(results) { 
    if (results[i] == d.source.name) { 
    console.log("1"); 
    lelangmodal.push(lelang[i] + " - dimenangkan oleh " + d.source.name); 
    console.log(lelangmodal); 
    } 
    else if (results[i] == d.target.name) { 
    console.log("2"); 
    lelangmodal.push(lelang[i] + " - dimenangkan oleh " + d.target.name); 
    console.log(lelangmodal); 
    } 
    else { 
    console.log("3"); 
    lelangmodal.push(lelang[i]); 
    console.log(lelangmodal); 
    } 
    $('#modalLelang').text(lelangmodal); 
    $('#myModal').modal('show');  
});} 

Я понятия не имею, почему results[i] возвращение undefined внутри then функции цикла. Любая помощь (или альтернативные способы ее решения) оценивается. Благодаря!

+0

Вы используете 'results [i]', но вы не установили 'i'. – Barmar

+1

Возможно, у вас должен быть цикл 'for (i = 0; i Barmar

+0

@ Barmar Aw Я забыл об этом ... Теперь это работает. Спасибо за супербыстрый ответ, сэр :) – Rosiana

ответ

0

Я понятия не имею, почему results[i] возвращает undefined внутри, а затем цикл функции.

Потому что у вас нет петли в функции .then(). Таким образом, i имеет значение, имевшееся в конце цикла, которое создало все обещания, которое представляет собой количество созданных обещаний. Но индексы results идут от 0 до i-1.

Promise.all(promises).then(function(results) { 
    for (var i = 0; i < results.length; i++) { 
    if (results[i] == d.source.name) { 
     console.log("1"); 
     lelangmodal.push(lelang[i] + " - dimenangkan oleh " + d.source.name); 
     console.log(lelangmodal); 
    } else if (results[i] == d.target.name) { 
     console.log("2"); 
     lelangmodal.push(lelang[i] + " - dimenangkan oleh " + d.target.name); 
     console.log(lelangmodal); 
    } else { 
     console.log("3"); 
     lelangmodal.push(lelang[i]); 
     console.log(lelangmodal); 
    } 
    } 
    $('#modalLelang').text(lelangmodal); 
    $('#myModal').modal('show'); 
}); 
+0

Спасибо, сэр, я совсем забыл об этом. Теперь это работает :) – Rosiana

Смежные вопросы