Javascript - Рекурсия и обещание

У меня есть эта функция:

// 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 здесь ): Я пробовал работать, чтобы заставить его работать, но все еще не работает. Вот как я это сделал:

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-запроса ... Спасибо

javascript,promise,

0

Ответов: 0

Javascript - Рекурсия и обещание

У меня есть эта функция:

// 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 здесь ): Я пробовал работать, чтобы заставить его работать, но все еще не работает. Вот как я это сделал:

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-запроса ... Спасибо

00JavaScript, обещание,
Похожие вопросы