Javascript - 递归和承诺

时间:2016-12-06 17:39:10

标签: javascript promise

我有这个功能:



// This function just add `_x` to all key and `_y` to all values
var data = {
  glossary: {
    title: "example glossary",
    GlossDiv: {
      title: "S",
      GlossList: {
        GlossEntry: {
          ID: "SGML",
          SortAs: "SGML",
          GlossTerm: "Standard",
          Acronym: "SGML",
          Abbrev: "1986",
          GlossDef: {
            para: "DocBook.",
            GlossSeeAlso: "GMLXML"
          },
          GlossSee: "markup"
        }
      }
    }
  }
};

function treee(data) {
  Object.keys(data).map(function(key) {
    if (data[key] && typeof data[key] === 'object') {
      treee(data[key]);
    }
    data[key + '_x'] = typeof data[key] === 'string' ? data[key] + '_y' : data[key];
    delete data[key];
  });
}


treee(data);
console.log(data);




我想改变他的行为。我希望'_x'是我从http请求收到的数据(我使用的是npm,你可以看到doc here): 我尝试过使用它来使其工作但仍然无法正常工作。 这就是我的成就:



var data = {
  "glossary": {
    "title": "example",
    "GlossDiv": {
      "title": "S",
      "GlossList": {
        "GlossEntry": {
          "ID": "SGML",
          "SortAs": "SGML",
          "GlossTerm": "Language",
          "Acronym": "SGML",
          "Abbrev": "ISo",
          "GlossDef": {
            "para": "DocBook.",
            "GlossSeeAlso": "GMLXML"
          },
          "GlossSee": "markup"
        }
      }
    }
  }
}

var http = require('request');

function treee(data) {
  Object.keys(data).map(function(key) {
    new Promise(function(resolve, reject) {
      http({
          url: 'url',
          headers: {
            'User-Agent': 'request'
          }
        },
        function(err, res, body) {
          if (err) {
            console.log('err');
            console.log(err);
            resolve("err")
          }

          if (data[key] && typeof data[key] === 'object') {
            treee(data[key]);
          }
          resolve(body.data)
        }
      );
    }).then(function(d) {
      data[key + d.x] = typeof data[key] === 'string' ? data[key] + '_y' : data[key];
      delete data[key];
    });
  });
}

treee(data);

console.log(data);




我的问题是如何从网络获取数据并添加到我的json中。除了_x来自http请求之外,我想要几乎相同的行为... 谢谢

0 个答案:

没有答案