Node.js + bluebird + JSON.JSON修改后无效



尝试获取API数据。我有问题,创建修改后有效的JSON。

数据应该是这样的:[{1},{"2"},{3},…,{201},{202},{203},……)

但现在:[{"1"},{"2"},{"3"},…], [{201}, {202}, {203 "}, ...]

我错在哪里?

var Promise = require("bluebird");
var request = require('bluebird').promisifyAll(require('request'));
var fs = Promise.promisifyAll(require('fs'));
var ladders = {"hardcore":"hardcore", "standard":"standard"};
function getJSONsync(urls) {
    var ladder = [];
    Promise.map(urls, function(url) {
        return request
            .getAsync(url)
            .spread(function (res, body) {
                if (res.statusCode != 200) {
                    throw new Error('Unsuccessful attempt. Code: '+ res.statusCode);
                }
                return JSON.stringify(ladder.concat(JSON.parse(body).entries), "", 4);
            })
            .catch(console.error);
    },{ concurrency: 10 })
    .then(function(arr) {
        fs.writeFileAsync('file.json', arr);
    })
}
function setUrls(ladderName, offset, limit) {
    var arr = [];
    while(offset < 15000 ) {
        arr.push('http://api.pathofexile.com/ladders/'+ladderName+'?offset='+offset+'&limit='+limit);
        offset = offset + 200;
    }
    return arr;
}
getJSONsync(setUrls(ladders.hardcore, 0, 200));

谢谢你的帮助。对不起,我的英文。

最后

:

var Promise = require("bluebird");
var request = require('bluebird').promisifyAll(require('request'));
var fs = Promise.promisifyAll(require('fs'));
var ladders = {"hardcore":"hardcore","standard":"standard"};
function getJSONsync(urls) {
  Promise.map(urls, function(url) {
    return request
      .getAsync(url)
      .spread(function (res, body) {
        if (res.statusCode != 200) {
          throw new Error('Unsuccessful attempt. Code: '+ res.statusCode);
        }
        return JSON.parse(body).entries;
      })
      .catch(console.error);
  },{ concurrency: 10 })
  .reduce(function(a, b) { return a.concat(b) })
  .then(function(arr) {
    fs.writeFileAsync('file.json', JSON.stringify(arr, "", 4));
    console.log(arr.length);
  })
}
function setUrls(ladder, offset, limit) {
    var arr = [];
    while(offset < 15000 ) {
        arr.push('http://api.pathofexile.com/ladders/'+ladder+'?offset='+offset+'&limit='+limit);
        offset = offset + 200;
    }
    return arr;
}
getJSONsync(setUrls(ladders.hardcore, 0, 200));

承诺。map返回一个数组,所以当你执行ladder.concat时返回另一个数组,所以它变成了[[{"1"}], [{"1", "2"}]

你应该删除concat:

return JSON.stringify(JSON.parse(body).entries, "", 4);

但是如果你想使用变量梯子你可以ladder.push(JSON.stringify(JSON.parse(body).entries, "", 4))和使用它来代替arr返回的变量

最新更新