Именованная функция в Node.Js, чтобы избежать того, что Callback hell не работает - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь разрешить ад обратного вызова, используя метод именованных функций, но обратные вызовы не работают должным образом. Скорее ошибка стоит TypeError: callback is not a function. Я предоставляю приведенный ниже код и даю встроенные комментарии для отображения ошибочных строк .

function displayWorks(works) {

    console.log(`Username: ${works.user} has [${works.work}] works`);
}

function getWorks(user) {
    console.log("User", user);
    getWorks(user, displayWorks);
}

console.log("Before");
getUser(1, getWorks);
console.log("After");

function getUser(id, callback) {

    setTimeout(() => {
        console.log("Reading users from Database");
        callback({id: id, gitHubUserName: 'John Doe'}) // callback not working
    }, 2000);
}

function getRepositories(username, callback) {

    setTimeout(() => {
        console.log("Reading HowToWork.Com API");
        var works = {userName: username, works: ['work1', 'work2', 'work3']};
        callback(works); // not working
    }, 2000);
}

Редактировать 1: Я использую версию NodeJ v6.14.3. Это проблема для версии.

1 Ответ

0 голосов
/ 12 ноября 2018

1) Вы вызываете callWorks внутри callWorks.Может быть, вы хотите вызвать getRepositories вместо

2) Вы вызываете callUser, предоставляя обратный вызов неправильным способом.

вуаля

function displayWorks(works) {

    console.log(`Username: ${works.user} has [${works.work}] works`);
}

function getWorks(user) {
    console.log("User", user);
    getRepositories(user.gitHubUserName, (works)=>{
        console.log(works)
    })
}

console.log("Before");
getUser(1, (user)=>{
    getWorks(user)
});
console.log("After");

function getUser(id, callback) {

    setTimeout(() => {
        console.log("Reading users from Database");
        callback({id: id, gitHubUserName: 'John Doe'}) // callback working
    }, 2000);
}

function getRepositories(username, callback) {

    setTimeout(() => {
        console.log("Reading HowToWork.Com API");
        var works = {userName: username, works: ['work1', 'work2', 'work3']};
        callback(works); // working
    }, 2000);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...