gpt4 book ai didi

javascript - writeFile 不等待变量被实例化

转载 作者:行者123 更新时间:2023-11-30 10:58:48 28 4
gpt4 key购买 nike

一般来说,我是 node.js 和 javascript 的新手,但我无法理解为什么 writeFile 函数正在写入一个空白文件。我认为 for 循环应该是一个 Promise,但我不确定如何编写它。

const removeProviders = function () {
readline.question('Where is the file located? ', function(filePath) {
let providerArray = fs.readFileSync(filePath).toString().split('\r\n');
console.log(providerArray);
let importFile = '';

for (let providerId in providerArray) {
getProvider(providerArray[providerId]).then((response) => {
let providerInfo = response.data;
return providerInfo;
}).then((providerInfo) => {
let entry = createImportEntry(providerInfo);
importFile += "entry";
})
}

fs.writeFile('C:/path/to/file.txt', importFile);

最佳答案

您可以将 for 循环中的所有 promise 收集到一个数组中,然后将它们传递到 Promise.all() 中,只有在所有 promise 都解决后才会解决。如果其中一个 promise 被拒绝,它也会拒绝:

const promises = providerArray.map((item) => {

return getProvider(item)
.then((response) => {
let providerInfo = response.data;
return providerInfo;
})
.then((providerInfo) => {
let entry = createImportEntry(providerInfo);
importFile += "entry";
});

});

Promise.all(promises).then(() => {

fs.writeFile('C:/path/to/file.txt', importFile, err => {

if (err) {
console.error(err);
}

});

});

在执行此操作时,您还可以摆脱 importFile 变量并直接收集您的 promise 的结果。 Promise.all().then(results => {}) 将为您提供所有结果的数组。因此不需要可更新的变量。

关于javascript - writeFile 不等待变量被实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58858512/

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