2017-08-31 1 views
0

Ich versuche, einen zusätzlichen Parameter an eine 3. Callback-Funktion übergeben (es ist nicht mein eigener Rückruf).js - pass extra Param zu Callback-Funktion

const selectedItems = dt.rows({ selected: true }); 
const selectedIndexes = selectedItems.indexes(); 
const selectedData = selectedItems.data(); 

let data_object = []; 

$.each(selectedData, (i, o) => { 
    data_object.push(o['PackageName']); 
}); 

window.bridge.deleteApps(data_object, (success_list, selectedIndexes) => { 
    console.log("test"); // selectedIndexes -> undefined 

}); 

Hintergrund: Es ist eine Funktion, die mit Qt kommt, die eine Python-Methode (pyqt) auslöst, wird der erste param besteht die zweite param Python eine Callback-Funktion mit der Rückkehr aus der Python-Methode (success_list) ist aber Ich brauche auch selectedIndexes.

Wenn ich

window.bridge.deleteApps(data_object, (success_list, abc=selectedIndexes) => { 
    console.log("test"); // abc + selectedIndexes is available 

}); 

Es tut mir leid, dass ich habe keine Schnipsel für Sie arbeiten zu testen, aber ich habe einige Forschungen über Rückrufe und tatsächlich es nicht verstehen, also bin ich nicht in der Lage um diesen Fall zu reproduzieren.

Antwort

1

Ich denke, ein Teil Ihrer Verwirrung ist, wie Rückrufe behandelt werden. Grundsätzlich ist es Aufgabe der window.bridge.deleteApps-Funktion, Parameter an den von Ihnen bereitgestellten Callback zu übergeben. Wenn Sie also nicht der Autor dieser Funktion sind, gibt es keine gute Möglichkeit, zusätzliche Parameter zu übergeben. Im obigen Beispiel sollten Sie jedoch Zugriff auf selectedIndexes haben, da Sie es mit const deklariert haben und auf Ihren Rückruf zugreifen können.

So sollten Sie in der Lage sein, diesen Code zu haben:

window.bridge.deleteApps(data_object, (success_list) => { 
    console.log(selectedIndexes); // Should be available because you've declared it in a higher scope 
    console.log(success_list); // Gets passed by the .deleteApss function 
}); 
+0

omg Ihr Recht ... Ich bin verwirrt AF, das ist, was ich zum ersten Mal und iam ziemlich sicher versucht, sagte, es 'selectedIndexes undefined' ist - .- – FalloutBoy

+0

Wenn Sie 'const selectedIndexes = selectedItems.indexes();' als Aufruf verwenden, um einen Wert für 'selectedIndexes' zu erhalten, sind Sie sicher, dass Sie tatsächlich einen Wert zurück bekommen? Können Sie protokollieren, was "selectedIndexes" ist, bevor Sie tatsächlich andere Anrufe tätigen? – stetsmando

+0

Ja, es funktioniert jetzt gut. Ich bin ziemlich sicher, dass ich einen "undefined" Fehler bekommen habe, als es gestern auf die Callback-Funktion zugegriffen hat. Deshalb habe ich sogar nach Hilfe gefragt, aber jetzt kann ich einfach auf die Variable im Callback zugreifen ... also gab es schließlich nie ein Problem: S Danke für deine Hilfe! – FalloutBoy