Vinnaren i pepparkakshustävlingen!
2017-01-07, 21:42
  #1
Medlem
gay4cows avatar
Hej där!

Jag har ett ganska ny till NodeJS och är lite ovan med asynchronous.

Jag försöker hämta flera värden från MySQL databasen men allt slutar fungera vid i callbacken i callbacken. Förklarar ganska oklart men om ni ser på koden kommer ni förmodligen förstå vad jag menar.

Kod:
connection.query("SELECT * FROM users WHERE id=1", function(erruser) {

connection.query("SELECT * FROM user_posts WHERE id=1 and user_id="+user[0].id, function(errposts) {

connection.query("SELECT * FROM xLOL WHERE id=1 and user_id="+posts[0].id, function(errxLOL) {

console.log(user.id);
console.log(posts.id);
console.log(xLOL.id); // Här får jag inte ut infon. TypeError: Cannot read property 'id' of null


});
});
}); 

Kod:
/home/cowy/penis_xxx/node_modules/mysql/lib/protocol/Parser.js:78
        throw err; // Rethrow non-MySQL errors
        ^

TypeError: Cannot read property 'id' of null


Skulle vara extremt tacksam om någon kunde hjälpa!
Citera
2017-01-07, 21:52
  #2
Medlem
Soluss avatar
Om du kör dina SQL-frågor från en konsol, vad får du då?
Citera
2017-01-07, 23:05
  #3
Medlem
gay4cows avatar
Citat:
Ursprungligen postat av Solus
Om du kör dina SQL-frågor från en konsol, vad får du då?

Tja där!

Om jag kör bara SQLn då får jag rätt resultat eller om jag kör dem separata och inte i callbacken.
Citera
2017-01-07, 23:08
  #4
Medlem
Povels avatar
I varje callback kan du ju passa på att hantera om `err` är icke-null, och isf kolla dess properties, så får du också automatiskt veta vad som är fel i den tredje hanteraren här.

/p
Citera
2017-01-08, 09:59
  #5
Moderator
Protons avatar
Citat:
Ursprungligen postat av gay4cow
Hej där!

Jag har ett ganska ny till NodeJS och är lite ovan med asynchronous.

Jag försöker hämta flera värden från MySQL databasen men allt slutar fungera vid i callbacken i callbacken. Förklarar ganska oklart men om ni ser på koden kommer ni förmodligen förstå vad jag menar.

Kod:
connection.query("SELECT * FROM users WHERE id=1", function(erruser) {

connection.query("SELECT * FROM user_posts WHERE id=1 and user_id="+user[0].id, function(errposts) {

connection.query("SELECT * FROM xLOL WHERE id=1 and user_id="+posts[0].id, function(errxLOL) {

console.log(user.id);
console.log(posts.id);
console.log(xLOL.id); // Här får jag inte ut infon. TypeError: Cannot read property 'id' of null


});
});
}); 

Kod:
/home/cowy/penis_xxx/node_modules/mysql/lib/protocol/Parser.js:78
        throw err; // Rethrow non-MySQL errors
        ^

TypeError: Cannot read property 'id' of null


Skulle vara extremt tacksam om någon kunde hjälpa!

Citat:
Ursprungligen postat av gay4cow
Tja där!

Om jag kör bara SQLn då får jag rätt resultat eller om jag kör dem separata och inte i callbacken.
Är du säker på att du kär "rätt" fråga mot databasen i sådana fall och inte någon du bara "tåtat ihop"? tycker det ser ut som att user blir null för att du inte får någon träff i databasen. Kan iofs inte nåt om node.js, men det verkar ju vara den logiska förklaringen till null.

Vad är xLols för nåt förutom ett hopplöst dåligt namn på ett objekt? Innehåller den något vettigt alls?
Citera
2017-01-08, 12:04
  #6
Medlem
Soluss avatar
Citat:
Ursprungligen postat av Proton
Är du säker på att du kär "rätt" fråga mot databasen i sådana fall och inte någon du bara "tåtat ihop"? tycker det ser ut som att user blir null för att du inte får någon träff i databasen.
Det här var min tanke från början. Det känns som att felet ligger tidigare än vad TS tror.
Citera
2017-01-09, 00:24
  #7
Medlem
CD-skivas avatar
Ärligt talat så har jag lite svårt för att förstå vad det är för syfte med dina queries.

Men för att komma ifrån "callback hell" så kan du köra med promises istället, så kan du skriva något i stil med
Kod:
getUsers(id)
.
then(getPostsFromUser)
.
then(getXlol)
.catch(
catchErrors

https://www.npmjs.com/package/promise-mysql
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback