私はSQLクエリを実行するjavascriptの次の部分を持っており、結果に応じて2番目のクエリを実行する必要があります。私は2番目のクエリの適切な値を反復処理するためにクロージャを使用して管理していますが、私は希望の値を返すことができませんでした。私は未定義になっています。クロージャからの戻り値は定義されていません
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM maintainance', [], function(tx, results){
maintainance_length = results.rows.length;
maintanance_query = results.rows;
for (i = 0; i < maintanaince_length; i++) {
maintainance_title = maintanance_query[i].element;
var classAction = function(){
if(maintanance_query[i].code == '0'){
return 'no';
}else{
//over here i use the closure to iterate each seperate maintainance_title value
(function(maintainance_title){
db.transaction(function(tx) {
tx.executeSql('SELECT * from maintainance_history WHERE element = \''+maintainance_title+'\'',
[], function(tx, results){
if(results.rows.length > 0 && results.rows[0].action == '1'){
return 'ok';
}else{
return 'warn';
}
},function(tx, error){
console.log(error);
console.log(tx);
});});
})(maintainance_title);
}
}
historyIcon = "<div class=\""+classAction()+"\"></div>";
}
},function(tx, error){
}
);
});
複雑訴訟形態がclassAction
が非同期であるため、私のコメントと一緒に行くの機能
'classAction()'は非同期関数であり、それを同期的に呼び出そうとしています。残念なことに、 '' ok ''や '' warn''を返す場所は空に戻りますが、実際には返り値では何も行われません。 'classAction()'の一番下には 'return'もありませんので、常にundefinedを返します。 – aaronofleonard
だから、私は "historyIcon ="
"関数に渡し、それぞれの戻り値がどこで発生するかを呼び出します。この方法では、各繰り返しが完了したときに呼び出されます – nikolas私は私の答えで取ったアプローチです、良い考え;) – aaronofleonard