я импортирую асинхронную функцию и пытаюсь ее использовать - PullRequest
0 голосов
/ 03 декабря 2018

Ниже приведена моя асинхронная функция для чтения данных

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

Я получаю сообщение об ошибке истечения времени ожидания

Время ожидания {_called: false, _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, скажите мне, что и как это сделать

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Ошибка происходит от fs.readFile, этот метод ожидает обратный вызов в качестве второго параметра.Если вы хотите сделать его синхронным, вы можете использовать readFileSync следующим образом:

filedata = fs.readFileSync('./scripts/pairs.json');

Наконец, ваша программа печатает неопределенное значение, потому что вы ничего не возвращаете в функцию foo, поэтому у 'i' ничего нет.

0 голосов
/ 03 декабря 2018

Вы используете 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;
    }
}
0 голосов
/ 03 декабря 2018

Вам нужно использовать «await», когда вы вызываете «a» функцию, подобную этой.

module.exports =  {

    foo: async () => {
        const a = async() =>  {
            filedata = await fs.readFile('./scripts/pairs.json');
            console.log(filedata);
        }
        await a()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...