2016-09-18 52 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]回報undefinedthen函數循環。任何幫助(或解決此問題的替代方法)都表示讚賞。謝謝!

+0

您使用'results [i]',但是您沒有設置'i'。 – Barmar

+1

也許你應該在回調函數中有一個'for(i = 0; i Barmar

+0

@Barmar噢我忘了那件事...現在它工作。謝謝你的超快反應,主席先生:) – 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