2017-09-15 4 views
0

イム作業2 JSON ojectsイマイチそのがresults JSONオブジェクトJavascriptを-Merging

コードにfeatures JSONオブジェクトを追加していないが、erroringない:私は中右の条件文の後console.log(results[i)場合

exports.getApps = function() { 
    return new Promise(function(resolve, reject) { 
    db.raw(` 
     SELECT * 
     FROM APPs 
     WHERE VARAPP_PUBLIC_ACTIVE > 0 
     ORDER BY VARAPP_PUBLIC_ACTIVE ASC, VARAPP_NAME ASC 
    `).then(function(results) { 
     if (results[0].length > 0) { 
     for (var i = 0; i < results[0].length; i++) { 
      elaborate(i, results, reject); 
     } 
     resolve({ 
      apps: results[0] 
     }) 
     } else { 
     resolve({ 
      error: 'No Apps Found' 
     }) 
     } 
    }).catch(function(err) { 
     console.error(err); 
     reject(err); 
    }); 
    }) 

    function elaborate(i, results, reject) { 
    db.raw(` 
     SELECT * 
     FROM APPs_Features 
     WHERE VARAPP_ID = ? 
      ORDER BY VARAPP_ORDER ASC 
     `, [results[0][i].VARAPP_ID], i) 
     .then(function(features) { 
     if (features[0].length > 0) { 
      results[0][i].Features = features[0]; 
     } else { 
      results[0][i].Features = null; 
     } 
     }).catch(function(err) { 
     console.error(err); 
     reject(err); 
     }); 
    } 
} 

elaborate()関数には、.featuresの結果jsonオブジェクトがありますが、resolve()がなくなる前にi console.log(results[0]がある場合

答えて

0

このdbコールはelaborateで非同期ではありませんか?

db.raw(` 
     SELECT * 
     FROM APPs_Features 
     WHERE VARAPP_ID = ? 
      ORDER BY VARAPP_ORDER ASC 
     `, [results[0][i].VARAPP_ID], i) 

これは、機能を追加する前に解決していることを意味します。呼び出しの前に各精巧な呼び出しのdb.raw()が完了するまで待つ必要がありますresolve({ apps: results[0] })