Csv 使用Typescript无法为fs.createReadStream内的类级别变量赋值

Csv 使用Typescript无法为fs.createReadStream内的类级别变量赋值,csv,variables,typescript,Csv,Variables,Typescript,我不熟悉typescript,有一个场景,在这个场景中,我需要从csv文件中读取数据,并将值分配给类级别的Map变量。 以下是我正在尝试但面临以下问题的代码:- a) 当我在我的fs.createReadStream函数中尝试类似这样的操作时,VS Code intellisence不会提示我类级别Map变量的名称 b) 即使我忽略intellisence内容并尝试编写用于分配值的代码,在运行时也会出现错误:- 无法读取未定义的属性集 myCSVHelper.ts文件的代码片段:- import

我不熟悉typescript,有一个场景,在这个场景中,我需要从csv文件中读取数据,并将值分配给类级别的
Map
变量。 以下是我正在尝试但面临以下问题的代码:-

a) 当我在我的fs.createReadStream函数中尝试类似这样的操作时,VS Code intellisence不会提示我类级别Map变量的名称

b) 即使我忽略intellisence内容并尝试编写用于分配值的代码,在运行时也会出现错误:-

无法读取未定义的属性集

myCSVHelper.ts文件的代码片段:-

import * as csvParse from 'csv-parser';
import fs = require('fs');
var parse = csvParse.Parser;

export class CSVHelper {
  public TestSpecificData = new Map<string, string>();

  public fetchTestSpecificData(clsName: string, mthdName: string): Map<string, string> {
    fs.createReadStream('../TestData/TestSpecificData.csv').pipe(csvParse()).on('data', function (data) {
      if (data.TestClass == clsName && data.TestMethod == mthdName)
        this.TestSpecificData.set(data.Key.toString(), data.Value.toString());

    }
    )   

    return this.TestSpecificData;

  }
}
import*作为“csv解析器”中的csvParse;
导入fs=需要('fs');
var parse=csvParse.Parser;
出口级CSVHelper{
public TestSpecificData=newmap();
公共fetchTestSpecificData(clsName:string,mthdName:string):映射{
fs.createReadStream('../TestData/TestSpecificData.csv').pipe(csvParse()).on('data',函数(data){
if(data.TestClass==clsName&&data.TestMethod==mthdName)
this.TestSpecificData.set(data.Key.toString(),data.Value.toString());
}
)   
返回此.TestSpecificData;
}
}

这是因为您正在定义一个由事件
数据调用的函数。关键字
this
通过此调用获取新上下文,其中
TestSpecificData
确实不存在

您可以尝试lambda表达式,其中
保留在您期望的上下文中:

fs.createReadStream('../TestDataTestSpecificData.csv')
    .pipe(csvParse())
    .on('data', (data) => {
       if (data.TestClass == clsName && data.TestMethod == mthdName) {
           this.TestSpecificData.set(data.Key.toString(), data.Value.toString());
       }
     });   

是的,我只想提出一个后续问题。这样做的全部目的是能够在函数末尾返回TestSpecificData:-fetchTestSpecificData。但是,我认为,由于typescript的异步行为,我没有在TestSpecificData映射变量中获得所需的值—知道如何解决它吗?哦,是的,你是对的。您将在数据到达之前返回地图。实现这一点有多种可能性。要么使用回调函数,要么使用承诺,要么使用可观察的。是的,我尝试使用承诺链解决这个问题,但无法解决。你能给我一些关于如何使用承诺来解决这个问题的指导吗?我不知道你的问题从哪里开始。但你必须像这里这样回报承诺