Javascript -Merging两个JSON对象无法正常工作

时间:2017-09-15 16:58:55

标签: javascript json node.js knex.js

我没有错误,但它没有将features json对象添加到results json对象

代码:

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

如果i console.log(results[i).then()函数的elaborate()内的条件语句之后,我得到带有.features的结果json对象,但是如果我console.log(results[0]正确的话在resolve()消失之前

1 个答案:

答案 0 :(得分:0)

elaborate中的此数据库调用是异步的吗?

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

这意味着您在添加功能之前正在解决问题。在调用resolve({ apps: results[0] })

之前,您需要等待每次详细调用中的每个db.raw()完成