繁体   English   中英

node.js异步返回值和导出模块

[英]node.js async return value & export module

我试图从csv文件中获取一些数据,然后对它们进行一些魔术处理,并使用此派生数据创建一个对象。 我使用module.exports创建了此函数,并导出了它。

var csvtojson = require('csvtojson');

var data = [];

module.exports = function createStock(name){
    var myObj = {};
    csvtojson().fromFile('./csv-raw/'+name+'.csv')
    .then(source => {
        source.forEach(value => {
            var row = {};
            row.Date = value.Date;
            row.Dividend_Yield = value.Dividend_Yield;
            row.Gross_Dividend_Per_Share = value.Gross_Dividend_Per_Share;
            row.Distribution_Rate = value.Distribution_Rate;
            data.push(row);
        });
    })
    .then(() => {
        myObj = {
            name: name,
            data: data,
            summary: {a: Math.random(), b: Math.random(), c: Math.random()}
        };
    })
    .then(() => {
        console.log(myObj)
        return myObj
    })  
}

并导入到路线;

const createdStock = require('../../modified');

router.get('/new/:stockName', async (req,res) => {
   var stock = await createdStock(req.params.stockName);
   setTimeout(() => {
       console.log(stock);  
   }, 2000);

(我可以在第一个文件中看到console.log(myObj)的结果)

(我看不到console.log(stock);在第二个文件中)

我试图找出问题是否源于JS的异步行为,但可以找到任何解决方案?

通常,我的问题是如何将在.then块内创建的数据发送到另一个JS文件。

在您的createStock函数中,您需要返回对csvtojson的调用。 这将返回Promise,使await工作正常进行。 然后,您将不需要setTimeout而只需console.log(stock)

module.exports = function createStock(name){
  var myObj = {};
  return csvtojson().fromFile('./csv-raw/'+name+'.csv')
  ...
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM