我有一些代码在其中生成了一些json数据,然后我想
我遇到的问题是:使用fetch
后执行fs.writeFile
时,出现ECONNREFUSED
错误。如果我不写文件,则对端点的获取请求成功。我将提取的内容放入writeFile函数的回调中-我也尝试过fs.writeFileSync(url)
,它给我相同的结果。我的完整代码要求writeFile首先出现。
我注意到,如果我将10000ms的fetch
包装在setTimeout
中,则提取将起作用。 似乎好像writeFile
没有等待足够长的时间来执行回调函数。
我做错了什么吗?或如何正确编写文件,然后获取API数据?
我将代码简化为最小的示例以重现此行为-并允许节点正确返回错误消息。 (在此示例中使用伪造的URL,因为真实的URL无法公开访问)
const fetch = require('node-fetch');
const fs = require('fs');
try {
fs.writeFile('./example.json', JSON.stringify(['test', 'one', 'two']), () => {
fetch('http://www.example.com/api_endpoint?q=test')
.then(console.info)
.catch(console.error);
});
} catch (e) {
console.info(e);
}
我正在Linux Debian 8.11(jessie)的nodejs v10.15.1中运行它
我发现了问题,这真是愚蠢的...
我的脚本与我的API服务器位于同一存储库中。在开发模式(adonis serve --dev
)下运行服务器时,fs.writeFile
触发文件监视程序重新加载(当然),这会暂时断开服务器的连接。很明显now为什么不起作用。
解决方案是让文件监视程序忽略我正在将json文件写入到的文件夹。
在我的情况下(与adonisjs合作)为adonis server --dev -i scripts
奇怪的是,这是一个月前工作的项目,那时我没有这个问题。我猜想从那时到现在,我的运行方式有所变化。