Node.JS:写入文件

时间:2017-07-31 15:31:09

标签: javascript json node.js promise async-await

我一直在研究一个问题,我似乎无法完全了解原点。 我的应用程序的工作流程如下:

  1. 获取个别请求的项目数组
  2. 针对此阵列的每个项目发出单独请求:Promise.all(array.map(individualRequest))
  3. 从每个请求获取信息并将其更改为特定布局
  4. 在JSON文件中记录数组中所有项目的修改信息
  5. 一切似乎都在无缝地完成第四步。在第3步中,我正确地修改了对象,但是当它返回到main(每个步骤都有一个专用模块)时,第4步写入:[null,null,null ...](原点中的每个项目为null)数组)在JSON文件中。

    我不确定如何将其放入代码中并使其简单(不发布整个原始代码),但您可以在此处找到完整版本: https://github.com/Ardzii/mongoNode

    我知道项目信息正在被正确转换,因为我在转换模块中留下了一个控制台日志以进行验证,它给了我正确的信息:

      

    [ADDED]:   { “名称”: “DASHEUR”, “一个”:[ “151.400000”, “1”, “1.000”]中, “b”:[ “148.500000”, “1”, “1.000”], “C”:[ “151.577960”, “0.01000000”], “v”:[ “1861.79012466”, “3063.32653118”], “p”:[ “151.527639”, “150.811326”], “吨”:[688,1205], “l” 的:[ “146.599930”, “146.599930”], “H”:[ “156.118780”, “156.118780”]中, “○”: “148.000000”}

    我不知道为什么,当它回到主(app.js)时:

    async function worker() {
          var tickerList = await getTickerList();
          var tickerInfo = await getTickerInfo(tickerList);
          var filename = `./modules/batches/${new Date().toISOString()}batch.json`;
    
          fs.writeFile(filename, JSON.stringify(tickerInfo), (err) => {
              if (err) throw err;
              console.log("[SUCCESS]: All tickers processed successfully!");
          });
      }
    
      worker();
    

    我得到了一个糟糕的

      

    [NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL]

    存储在JSON文件中的

    ...(再次,对于数组中的每个项目,这是一个'null')

    提前感谢您的帮助,我希望我能够保持清晰简单!

1 个答案:

答案 0 :(得分:3)

modules/transformTicker.js, line 22

function transformTicker(ticker) {
  var result = {};
  Object.keys(ticker).forEach((k) => {
    // Object.keys(ticker[pair]).forEach((k) => {
      // console.log(k);
      result= {
        name: k,
        a: ticker[k].a,
        b: ticker[k].b,
        c: ticker[k].c,
        v: ticker[k].v,
        p: ticker[k].p,
        t: ticker[k].t,
        l: ticker[k].l,
        h: ticker[k].h,
        o: ticker[k].o,
      }
      console.log(`[ADDED]: ${JSON.stringify(result)}`);
      return result;
    // });
  });
}

你的回归'语句在forEach函数范围内,而它应该在for-each循环之后。

更正版本:

function transformTicker(ticker) {
  var result = {};
  Object.keys(ticker).forEach((k) => {
    // Object.keys(ticker[pair]).forEach((k) => {
      // console.log(k);
      result= {
        name: k,
        a: ticker[k].a,
        b: ticker[k].b,
        c: ticker[k].c,
        v: ticker[k].v,
        p: ticker[k].p,
        t: ticker[k].t,
        l: ticker[k].l,
        h: ticker[k].h,
        o: ticker[k].o,
      }
      console.log(`[ADDED]: ${JSON.stringify(result)}`);
    // });
  });
  return result;
}