【问题标题】:Javascript -Merging two JSON ojects isnt workingJavascript - 合并两个 JSON 对象不起作用
【发布时间】:2017-09-15 16:58:55
【问题描述】:

我没有出错,但是它没有将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);
      });
  }
}

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

【问题讨论】:

    标签: javascript json node.js knex.js


    【解决方案1】:

    elaborate 中的这个 db 调用是异步的,不是吗?

    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() 都完成后

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 2019-12-17
      相关资源
      最近更新 更多