gpt4 book ai didi

javascript - 使用 Promise 确保文件流已结束

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:01 25 4
gpt4 key购买 nike

我从以下两个变量开始

var yearTotal2008 = 0; 
var year2008TallyByPatient = {};

然后通读大 csv 文件的每一行,相应地更新两个变量。这需要一段时间。

const produceChartData = () => {
inputStream
.pipe(CsvReadableStream())
.on('data', function (row) {
if ((20080101 <= row[3]) && (row[3] <= 20081231)) {
yearTotal2008 += parseFloat(row[6])
yearPatientTally(year2008TallyByPatient, row[0], parseFloat(row[6]))
}
})
.on('end', function (data) {
console.log('end of the read')
console.log('year total claims: ' + yearTotal2008)
console.log('average claims by patient: ' + averageClaimByPatient(year2008TallyByPatient))
return;
})
}

我想确保流已完成并且所有相关值已添加到两个变量中。

function resolveGetCall (getCall) {
return Promise.resolve(getCall)
}

resolveGetCall(produceChartData())
.then(result => {
return Promise.resolve(averageClaimByPatient(year2008TallyByPatient))
})
.then(result => console.log(result))

输出结果是这样的

NaN
end of the read
year total claims: 125329820
average claims by patient: 2447.70

我一直在浏览这里的其他线程,但它只是没有点击我做错的地方。

最佳答案

您的 ProduceChartData 目前没有返回任何内容。您需要将其转换为返回一个解析 on('end') 的 Promise。(仅使用 Promise.resolve(getCall) 不会使任何异步自动等待)

例如:

const produceChartData = () => {
return new Promise((resolve) => {
inputStream
.pipe(CsvReadableStream())
.on('data', function (row) {
if ((20080101 <= row[3]) && (row[3] <= 20081231)) {
yearTotal2008 += parseFloat(row[6])
yearPatientTally(year2008TallyByPatient, row[0], parseFloat(row[6]))
}
})
.on('end', function (data) {
console.log('end of the read')
console.log('year total claims: ' + yearTotal2008)
console.log('average claims by patient: ' + averageClaimByPatient(year2008TallyByPatient))
resolve();
})
});
}

然后您可以在调用 productChartData 时直接调用 then:

produceChartData()
.then(() => {
console.log('all done');
});

我看到你正在使用

return Promise.resolve(averageClaimByPatient(year2008TallyByPatient))

如果 averageClaimByPatient 异步操作,那么您还需要将其转换为返回 Promise,就像上面修改的 productChartData 一样。然后,只需返回 Promise:

.then(() => {
return averageClaimByPatient(year2008TallyByPatient);
})

关于javascript - 使用 Promise 确保文件流已结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52604465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com