首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript -Merging两个JSON对象不工作

Javascript -Merging两个JSON对象不工作
EN

Stack Overflow用户
提问于 2017-09-16 00:58:55
回答 1查看 43关注 0票数 0

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

代码:

代码语言:javascript
复制
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对象,但是如果我在resolve()之前使用console.log(results[0],它就没有了

EN

回答 1

Stack Overflow用户

发布于 2017-09-16 01:32:31

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

代码语言:javascript
复制
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] })

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46244422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档