javascript - Node.JS:写入文件时 Promise 产生 null

标签 javascript json node.js promise async-await

我已经研究一个问题有一段时间了,但我似乎无法完全理解其起源。 我的应用程序的工作流程如下:

  1. 获取单个请求的一系列项目
  2. 为此数组中的每个项目发出单独的请求:Promise.all(array.map(individualRequest))
  3. 从每个请求中获取信息并将其更改为特定布局
  4. 将数组中所有项的修改信息记录在 JSON 文件中

到第四步为止,一切似乎都在顺利进行。在第三步中,我正确修改了对象,但是当它回到主部分(每个步骤都有一个专用模块)时,第四步写道:[null,null,null ...](对于原始中的每个项目都为null数组)在 JSON 文件中。

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

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

[ADDED]: {"name":"DASHEUR","a":["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"],"t":[688,1205],"l":["146.599930","146.599930"],"h":["156.118780","156.118780"],"o":"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”)

预先感谢您的帮助,我希望我能够保持清晰和简单!

最佳答案

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;
    // });
  });
}

您的“return”语句位于 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;
}

关于javascript - Node.JS:写入文件时 Promise 产生 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45419901/

相关文章:

javascript - 如何延迟iframe的加载?

javascript - String.replace() 不替换换行符(或任何东西,就此而言)

javascript - 覆盖持久 iFrame 的 Firefox 扩展?

javascript - 将 JSON 数据打印到 innerHTML 中未定义 - [对象]

javascript - JSON 输入意外结束

javascript - 使用 Typescript 或 NodeJS 发出 HTTP 请求

javascript - 如何修改此 javascript 代码以添加文本框并接收用户的输入?

jquery - 为 JqPlot 条形图构建 JSON

javascript - 如何导出需要其他模块的模块

node.js - 无法创建 AWS Quicksight 嵌入式仪表板 URL