• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[JQUERY] promise() not work funktioniert nicht

Blackhead77

New member
Dieser Code zum auslesen einer csv Datei funktioniert.

Leider das Promise() nicht welches dafür sorgt dass der wert in return steht.

Code:
var loadCategories = function(){
    return $.ajax({
        url: 'branchen.csv',
        dataType: 'text'
    }).promise();
}; 

var dataSource = loadCategories(); 

var getCategories = function(){
	
   var branches = [];
   
   dataSource.then(function(result){
     
       var lines = result.split(/\n/);

       lines.forEach(function(value, index){
    
            var lines2 = value.split(';');
            var branche = lines2[0];
            var catNumber = lines2[1];
            var num = lines2[2];
           
            branches.push({name:branche, number: catNumber});            
           
       });
   });
   

   return branches;
};var loadCategories = function(){
    return $.ajax({
        url: 'branchen.csv',
        dataType: 'text'
    }).promise();
}; 

var dataSource = loadCategories(); 

var getCategories = function(){
	
   var branches = [];
   
   dataSource.then(function(result){
     
       var lines = result.split(/\n/);

       lines.forEach(function(value, index){
    
            var lines2 = value.split(';');
            var branche = lines2[0];
            var catNumber = lines2[1];
            var num = lines2[2];
           
            branches.push({name:branche, number: catNumber});            
           
       });
   });
   

   return branches;
};
 
Zuletzt bearbeitet von einem Moderator:
Leider das Promise() nicht welches dafür sorgt dass der wert in return steht.
das leistet ein promise nicht (und soll es auch nicht, asynchronität ist gewollt).
promise bietet dir nur einen standard-weg asynchrone (und auch synchrone) vorgänge zu handhaben. sprich, dein callback hast du weiterhin
 
Dein Code sollte eigentlich funktionieren, wenn du das .promise() einfach komplett weg lässt. $.ajax() liefert schon ein Promise zurück.
 
OK - hatte die Schnittstelle falsch im Kopf. Dachte, dass promise() das Promise auflöst... diese Methode am Deferred-Objekt ergibt für mich irgendwie überhaupt keinen Sinn.

Trotzdem funktioniert der Code. Wenn das Promise aufgelöst wird, werden in die Variable branches die Daten reingeschrieben... es kommt hald darauf an, wie diese Variable danach weiter verwendet wird.
 
Trotzdem funktioniert der Code. Wenn das Promise aufgelöst wird, werden in die Variable branches die Daten reingeschrieben... es kommt hald darauf an, wie diese Variable danach weiter verwendet wird.
diese Variable kann man danach überhaupt nicht weiter verwenden, da man nicht weiss, wann sie befüllt wird
getCategories und ähhh... ...getCategories - die funktion gibt es außerdem 2 mal, bzw. wird sie überschrieben - entweder soll das nur eine sein und der TO hat sie versehentlich 2 mal kopiert, oder die namensgebung ist mehr als schlecht gewählt.
also getCategories legt ein array an startet einen request und gibt das array zurück.
gewollt ist: getCategories legt ein array an, startet einen request gekapselt durch ein Promise gibt diesem ein callback mit, dass das array befüllt, kapselt dieses array in einem Promise, gibt das zurück, das callback wird durch ein Promise gekapselt und zurückgegeben.
so in etwa
Code:
var loadCategories = function(){
    return $.ajax({
        url: 'branchen.csv',
        dataType: 'text'
    }).promise();
}; 

var dataSource = loadCategories(); 

var getCategories = function(){
	
   var branches = [];
   
   return dataSource.then(function(result){
     
       var lines = result.split(/\n/);

       lines.forEach(function(value, index){
    
            var lines2 = value.split(';');
            var branche = lines2[0];
            var catNumber = lines2[1];
            var num = lines2[2];
           
            branches.push({name:branche, number: catNumber});            
           
       });
       return branches;
   });
};
var branchP = getCategories();
branchP.done(alert);
 
So kann der Code natürlich nicht funktionieren.

Aber innerhalb des .then() kann man die Variable natürlich weiterverwenden... wobei dann die Frage ist, warum sie außerhalb definiert ist.

Code:
var loadCategories = function(){
	return $.ajax({
		url: 'branchen.csv',
		dataType: 'text'
	});
}; 

var dataSource = loadCategories(); 

var getCategories = function(){
	dataSource.then(function(result){
		var branches = result
			.split(/\n/)
			.map(function(line){
				var lines2 = line.split(';');
				var branche = lines2[0];
				var catNumber = lines2[1];
				var num = lines2[2];
				return {name:branche, number: catNumber};            
			});
		// Hier kann man jetzt mit branches arbeiten
	});
};
 
So kann der Code natürlich nicht funktionieren.
so wie wo? wie beim op? ja! so wie bei mir? doch, sollte!

wobei dann die Frage ist, warum sie außerhalb definiert ist.
weil er sie ja zurückgeben will.
ursprünglich dachte ich, er hat 2 funktionen, von denen er dann beide ergebnisse zur weiterverarbeitung benötigt.
die hätte man dann schön über Promise.all synchronisieren können
 
Ach so - du meintest dann wieder mit einem Promise arbeiten... ich dachte, getCategories() sollte gleich den Array zurückliefern.
 
Zurück
Oben