因此,我将竭尽全力使节点中的流,promise和async功能得到解决。我似乎从来没有做对。我有两个非常相似的用例(看起来很标准)。像这样:
因此,下面的代码“ 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
答案 0 :(得分:-1)
经过所有的忙碌之后,我是如此亲密。上面的代码由于3个原因而失败。 (如果有人在我的旅途中)
兑现承诺似乎可行,上述问题是:
.then()
特定于流的内容resolve()
async
控制函数,并通过将流包裹在一个Promise中后逐流踢来假装一切都是顺序的。也许有更轻松的方法可以做到这一点,但希望这会有所启发。
import { parseString } from '@fast-csv/parse';
import * as fs from "fs";
const profileFS: string = "tsconfig.json"
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', data => {
console.log("2: Reading Program " + data);
resolve();
}
});
})
}
async function iWait (){
const isThisAPromise = await IHateStreams()
console.log("3: code done, so running next command with the data")
}
iWait();
console.log("1.99: code done, not in chain")