2017-09-05 3 views
0

Ich versuche, einige Daten in mehreren Funktionen zu erhalten und möchte sie verketten, um die letzte Funktion nur auszuführen, wenn alle Daten ordnungsgemäß geladen wurden.jQuery Funktion Verkettung mit Deferred: .done() - Funktion sofort aufgerufen

Das Problem ist, dass die Funktionen im .done() - Teil sofort aufgerufen werden und nicht warten, bis das Deferred-Object aufgelöst ist. Ich habe es auch versucht, indem ich sie mit .then() verkettet habe, aber das hat auch nicht funktioniert.

var array1, array2; 

function doStuffWithReceivedData() { 
    // Working with the data 
} 

function getArray1() { 
    var defArray1 = $.Deferred(); 

    $.getJSON(url, function(data) { 
     if (data.success) { 
      array1 = data.payload; 
      defArray1.resolve(); 
     } else { 
      // Information displayed that there was an error 
     } 
    }) 

    return defArray1; 
} 

// Function 2 is like the first one 
function getArray2() {...}; 

$(document).read(function() { 
    getArray1() 
     .done(getArray2() 
      .done(doStuffWithReceivedData())); 
} 
+2

Sie rufen diese Methoden auf und geben ihre Referenzen nicht an. Entfernen Sie die Klammern. –

+0

Verwenden Sie this-- getArray1(). Promise(). Done (function() { doStuffWithReceivedData() }); –

+0

https://stackoverflow.com/questions/15886272/what-is-the-difference-between-a-function-call-and-function-reference – Utkanos

Antwort

1

Das Argument zu .done() muss eine Funktion sein. Sie rufen die Funktion auf, übergeben sie nicht. Entfernen Sie die Klammern.

$(document).ready(function() { 
    getArray1() 
     .done(function() { 
      getArray2().done(doStuffWithReceivedData)); 
     } 
} 
Verwandte Themen