问题描述
因此,我将竭尽全力使节点中的流,promise和async功能得到解决。我似乎从来没有做对。我有两个非常相似的用例(看起来很标准)。像这样:
- 我有一个流可以获取一些数据
- 我需要将其通过管道传递给进程(在这种情况下为fast-csv)
- 完成后,我需要将其发送到下一步(实际上是发送到数据库)
- 在现实世界中,我需要等待数据库更新完成
- 下一步打开下一个文件流
- 过程
- 添加
- 重复...
因此,下面的代码“ SHOULD”就是这样做的,但是诺言不会等待被解决。等待仅在异步函数中起作用(并且流似乎主动忽略使用等待的任何尝试)
import { parseString } from '@fast-csv/parse';
import * as fs from "fs";
async function IHateStreams (){
/** Lets read profiles */
console.log("1: Reading Program " + profileFS);
let fileContent = fs.readFileSync(profileFS,'utf8');
let dataset : Array<any> = []
return new Promise((resolve,reject) => {
parseString(fileContent,{headers: true})
.on('error',error => console.error(error))
.on('data',row => dataset.push(row))
.on('end',() {
console.log("2: Inside Done")
resolve
});
})
}
IHateStreams().then(console.log("3: stream done!"));
console.log("4: code done,so running next command with the data")
代替好的输出:
1: Reading Program ./dbinitdata/ProfileIdName.csv
2: Inside Done
3: stream done!
4: code done
我得到:
1: Reading Program ./dbinitdata/ProfileIdName.csv
3: stream done!
4: code done
2: Inside Done
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)