TypeError: callback is not a function - Node JS

TypeError: callback is not a function - Node JS

我正在学习 Node js,当 运行 代码时出现以下错误。

TypeError: callback is not a function

任何帮助将不胜感激。

以下是我的代码

console.log('before');
getUser(1, getRepositories);
console.log('After');


function getRepositories(user) {
    getRepositories(user.gitHubUsername, getCommits);
}

function getCommits(repos) {
    getCommits(repos, displayCommits);
}

function displayCommits(commits) {
    console.log(commits);
}



function getUser(id, callback) {
    setTimeout(() => {
        console.log('Reading a user data from database...');
        callback({ id: id, gitHubUsername: 'Gary' });
    }, 2000);
}

function getRepositories(username, callback) {
    setTimeout(() => {
        console.log('Calling Github API....');
        callback(['repo1', 'repo2', 'repo3']);
    }, 2000);
}

你应该有不同的函数名称。

那是因为当您从 getUser 调用回调时,您期望调用 getRepositories(user) 但实际上调用了 getRepositories(username, callback)。在控制台上打印用户名,这样你就知道了。

THERE'S NO OVERLOADING IN JAVASCRIPT.

所以您需要做的是更改函数的名称,或者执行类似

的操作
function getUser(id, callback) {
    setTimeout(() => {
        console.log('Reading a user data from database...');
        // callback({ id: id, gitHubUsername: 'Gary' });
        callback("Gary", getCommits);
    }, 2000);
}

另一方面,您的 getCommits(repos) 在没有任何基本条件的情况下不断调用自己。您可能会收到 RangeError: Maximum call stack size exceeded.

如果你是 nodeJs 的新手或 JavaScript,现在你不需要学习回调,特别是你不需要以提供函数作为参数的方式编写代码(你将在您的函数结束时调用)。

如果您非常熟悉执行流程,您可以按顺序编写函数而不是编写回调。

即使任何函数具有异步代码,您也可以使用 Promises 并利用 async/await 功能。

回调会使您的代码变得有点复杂并且难以调试。

这是我的看法! javascript 过去常常通过回调完美地工作。但是随着最近添加的 Promise,async/await 生活变得有点轻松。