Node.Js中的命名函数,以避免回调地狱无法工作



我正试图使用命名函数技术解决回调地狱,但回调无法正常工作。相反,错误代表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:我使用的是NodeJs版本6.14.3。这是版本的问题吗。

1(您在callWorks内部调用callWorks。也许你想调用getRepository而不是

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

最新更新