Node.js + 蓝鸟 + JSON。 JSON修改后无效

Node.js + bluebird + JSON. JSON is not valid after modification

正在尝试获取 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));

Promise.map returns 一个数组,所以当你做 ladder.concat 你 return 另一个数组,所以它变成 [[{"1"}], [{"1", "2"}]

你应该只删除 concat:

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

但是如果你想使用变量 ladder 你可以 ladder.push(JSON.stringify(JSON.parse(body).entries, "", 4)) 并使用它而不是 arr return编辑变量