Ich bin kein Profi mit Node.JS und Javascript als Ganzes, also bitte verzeiht mir, wenn dies eine dumme Frage.Node.JS - Warten Sie eine Funktion vor der Ausführung Rest des Codes beenden
ich einen Node.JS Server leite Socket-Verbindungen für eine Website zu akzeptieren, dass ich laufen werde, und ein Teil von dem, was dieses Skript gemeint ist, zu tun, ist eine Datenbank, in Verbindung. Ich habe eine Funktion, die dies vor dem Starten des Servers tun soll. Wenn ich jedoch die Funktion aufruft, fährt sie mit dem Rest des Codes fort und wartet nicht auf die Beendigung der Funktion. Ich habe versucht, Callbacks zu verwenden, aber ohne Erfolg, und ich habe keine Ahnung, wie man Promises einsetzt. Kann jemand erklären, wie ich dieses Problem löse?
Hier ist mein Code als Referenz:
function GetCompetitionInfo(competitionID,callback){
var competitionInfo = {
id:competitionID,
title:"",
topic:"",
difficulty:"",
description:"",
jackpot:0,
answer:0,
author:0
}
var testVariable;
sqlConnection_read.connect(function(err){
if(err) throw err;
console.log("Connected to TSDB, retrieving competition info...");
var query = "SELECT * FROM competitions WHERE PuzzleID="+competitionID+";";
sqlConnection_read.query(query,function(err,result){
if(err) {console.log("Uh oh spaghettiohs");throw err;}
competitionInfo.title = result[0].Puzzle_Title;
competitionInfo.topic = result[0].Puzzle_Topic;
competitionInfo.difficulty = result[0].Puzzle_Difficulty;
competitionInfo.description=result[0].puzzle_description;
competitionInfo.answer=result[0].Puzzle_Answer;
competitionInfo.jackpot=result[0].Puzzle_Jackpot;
competitionInfo.author=result[0].Puzzle_Author;
callback(competitionInfo);
});
});
}
GetCompetitionInfo(0,function(data){
competitionInfo=data;//This is a variable outside of the scope
});
//I want this to be executed afterwards
var competitionTitle = competitionInfo.title;
var competitionTopic = competitionInfo.topic;
var competitionDifficulty = competitionInfo.difficulty;
var competitionDescription = competitionInfo.description;
var competitionAnswer = competitionInfo.answer;
var jackPotTotal = competitionInfo.jackpot;
var competitionAuthor = competitionInfo.author;
console.log("Title:"+competitionTitle);
console.log("Topic:"+competitionTopic);
console.log("Difficulty:"+competitionDifficulty);
console.log("Description:"+competitionDescription);
console.log("Answer:"+competitionAnswer);
console.log("Jackpot:"+jackPotTotal);
console.log("Author UID:"+competitionAuthor);
Aber dies scheint sofort ausgeführt werden, bevor die GetCompetitionDetails Funktion beendet hat. Wie kann ich sie nacheinander ausführen lassen?
einfach es in dem Rückruf setzen oder eine Rück Versprechen ... –