node.js - 我正在导入一个异步函数并尝试使用它

标签 node.js asynchronous promise

以下是我读取数据的异步函数

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));
})

我收到超时错误

超时{ _称为:假, _idle超时:5000, _idlePrev:

接下来我删除了 setTimout 并尝试了然后我变得未定义

app.get('/createaccount', (req, res) => {
    console.log(a.foo().then((i) => console.log(i)))
})

接下来我更改了 2_fundaccounts 代码

await a()

我得到

Server is listing on port 3000
Promise { <pending> }
(node:18637) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
undefined

1) 任何关于在没有任何错误的情况下解决 promise 的建议

2)请帮助我,我不想更改我的 2_fundacounts 代码,我没有权限

3)如果我必须更改 2_fundaccounts,请告诉我要做什么以及如何做

最佳答案

你使用了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;
    }
}

关于node.js - 我正在导入一个异步函数并尝试使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53592234/

相关文章:

node.js - 使用 kubernetes/client-node lib

javascript - 访问异步函数返回的最佳方式

java - 避免等待 Servlet 流

javascript - 如何有效地使用 JS Promises?

javascript - 这是 Node/promisify 异步函数的有效语法吗?

javascript - 链接index.html client.js 和 server.js

node.js - 如何在 Node.js 中最好地实现套接字客户端并中继到前端?

javascript - Nodemailer 使用 POST 表单时返回 404

c++ - 是什么导致 async_write 出现错误的文件描述符错误?

javascript - 在 promise 中传播 .catch 的正确方法是什么?