2017-09-15 27 views
0

我不是示數,但其不添加features JSON對象到results JSON對象的Javascript -Merging 2個JSON ojects心不是工作

代碼:

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); 
     }); 
    } 
} 

如果我console.log(results[i)內的條件語句之後在elaborate()函數中的.then()我得到的結果JSON對象的.features,但是如果我console.log(results[0]之前resolve()它不見了

回答

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] })