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 生活变得有点轻松。
我正在学习 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 生活变得有点轻松。