Используйте функции Asyn c, которые вызывают другие функции из того же модуля. Экспорт в Javascript и nodejs - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь создать приложение, которое может читать JSON с NodeJs.

То, что я действительно получил хороший результат (возможно, медленный для выполнения.) Я хотел бы получить экспертное мнение, которое может взглянуть на мой код, потому что я чувствую себя потерянным и сбитым с толку ...

На самом деле : killboard. js с использованием согнуты для JSON

const bent = require('bent');
const getJSON = bent('json');
const config = require('../config.json');

function showKill(kill)
{
    console.log(kill.Killer.Name + " est un meurtrier !");
}

function getKill(killsList) {
    return new Promise((resolve, reject) => {
        killsList.some(function(kill, index) {
            console.log("One kill ...");
            showKill(kill);
        });
    });

}



module.exports = {
    exec: async() =>
    {
        let killsList = await getJSON('https://gameinfo.albiononline.com/api/gameinfo/events?limit=51&offset=0');
        await getKill(killsList);
    }

}

И мое приложение:

const KillBoar = require('./module/killboard');

KillBoar.exec();

Работает отлично ....

Но как мне интегрировать: showKill и getKill канонически внутри "module.exports". Я имею в виду что-то вроде этого:

module.exports = {
    exec: async() =>
    {
        let killsList = await getJSON('https://gameinfo.albiononline.com/api/gameinfo/events?limit=51&offset=0');
        await getKill(killsList);
    },
    getKill(killsList) {
        return new Promise((resolve, reject) => {
            killsList.some(function(kill, index) {
                console.log("One kill ...");
                showKill(kill);
            });
        });

    },
    showKill(kill)
    {
        console.log(kill.Killer.Name + " est un meurtrier !");
    }

}

Потому что, если я это сделаю, у меня есть эта ошибка:

(node:7392) UnhandledPromiseRejectionWarning: ReferenceError: getKill is not defined
    at Object.exec (C:\Users\Baptiste\Desktop\BotDiscord\KillBoard\module\killboard.js:26:9)
    at processTicksAndRejections (internal/process/task_queues.js:94:5)
(node:7392) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which 
was not handled with .catch(). (rejection id: 1)
(node:7392) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Спасибо, что нашли время, чтобы ответить!

1 Ответ

0 голосов
/ 03 апреля 2020

Вы изменили их с определений функций (которые называются простыми функциями) на методы объекта module.exports, поэтому теперь вам нужно вызывать их как методы для этого:

module.exports.getKill(killsList);
…
module.exports.showKill(kill);

В качестве альтернативы вы может сойти с рук this.getKill(…) / this.showKill(…), см. здесь для подробной информации о разнице.

Третий вариант - сохранить их как функции и просто добавить их в экспорт. , Тогда вы могли бы назвать их в любом случае:

function showKill(kill) { … }

module.exports = {
    async execc() { … },
    showKill,
};
...