以下是我读取数据的异步函数
const fs = require('fs');
module.exports = {
foo: async () => {
const a = async () => {
filedata = await fs.readFile('./scripts/pairs.json');
console.log(filedata);
}
a()
}
}
我正在导入第二个文件中的数据,并尝试使用setTimeout尝试,但失败了
var a = require('./ scripts / 2_fundAccounts')
app.get('/createaccount',(req,res) =>{
console.log(setTimeout(()=>a.foo().then((i)=> console.log(i)),5000));
})
我收到超时错误
超时{ _称为:错误, _idleTimeout:5000, _idlePrev:
接下来,我删除了setTimout并尝试使用,然后我变得不确定
app.get('/createaccount', (req, res) => {
console.log(a.foo().then((i) => console.log(i)))
})
接下来,我更改了2_fundaccounts代码
等待a()
我知道了
Server is listing on port 3000
Promise { <pending> }
(node:18637) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
undefined
1)任何获得承诺的建议都会得到解决,而不会出现任何错误
2)请帮助我,我不想更改我没有赖特的2_fundacounts代码
3)如果我必须更改2_fundaccounts,请告诉我该怎么做以及如何做
答案 0 :(得分:4)
您使用fs
错误。它的方法是异步的,但它们基于回调。您的代码应类似于:
foo() {
return new Promise((resolve, reject) => {
fs.readFile('./scripts/pairs.json', (err, filedata) => {
if (err) {
reject(err);
} else {
resolve(filedata);
console.log(filedata);
}
});
});
}
但是,如果您使用的是Node 10或更高版本,则导入require('fs').promises
可使您将其方法用作典型的异步函数:
const fs = require('fs').promises;
module.exports = {
foo: async () => {
const filedata = await fs.readFile('./scripts/pairs.json');
console.log(filedata);
return filedata;
}
}
答案 1 :(得分:0)
当您这样调用“ a”函数时,需要使用“ await”。
module.exports = {
foo: async () => {
const a = async() => {
filedata = await fs.readFile('./scripts/pairs.json');
console.log(filedata);
}
await a()
}
}
答案 2 :(得分:-1)
错误来自fs.readFile,此方法将回调作为第二个参数。如果要使其同步,可以使用如下所示的readFileSync:
filedata = fs.readFileSync('./scripts/pairs.json');
最后,您的程序正在打印未定义的内容,因为您没有向foo函数返回任何内容,因此'i'没有任何内容。