ich Schwierigkeiten Umfang erlebt habe durch die asynchrone Struktur des folgenden Dojo-Widget vorbei:Dojo: Richtige Weg, um ‚Hitch‘ Umfang der latenten Arten
function callDef(){
//This function has the scope I need
var deferred = new Deferred();
//try to hitch 'this' to function2
DojoBaseLang.hitch(this,deferred.resolve(function2(1)));
deferred.then(DojoBaseLang.hitch(this, function(callback) {
callback.then(
function (desiredResult) {
//How to hitch callDef initial scope to function3?
function3(desiredResult);
},
function (err) {
// Do something when the process errors out
console.log(err);
})
}),
function (err) {
// Do something when the process errors out
console.log(err);
}
);
function function2(variable){
//callDef scope not passed by hitch :(
var dataStucture;
//deferredFunction is a function which returns type Deferred
return deferredFunction(hierarchyTableQuery, function(dataSet){
//some iterative maniupulations will be performed on dataStructure here
dataStructure = dataSet;
}).then(function(){
return dataStructure;
});
}
function function3(variable){
//need a way to also have scope in this method
//doing other stuff
}
Wie Sie sehen können, callDef zuerst in function2 ruft, gibt eine latente , beendet die Ausführung und übergibt dann das Ergebnis aus dem Objekt dataStructure
von function2 an function3. Dies alles funktioniert gut in Bezug auf Deferred/Async-Verhalten, das Problem ist, dass die dojo/_base/lang.hitch
Funktion, die aufgerufen wird, nicht den Gültigkeitsbereich von Funktion zu Funktion wie es normalerweise passiert, in diesem Fall von callDef
zu function2
. Ich möchte auch den gleichen Umfang in function3
übergeben. Meine require-Anweisung ist korrekt, und ich habe andere nicht asynchrone Aufrufe von .hitch
, die in demselben Widget/derselben Datei erfolgreich sind.
Vielen Dank für jede Hilfe
OMG suchen. Es heißt "Kontext" oder "Empfänger", nicht * Geltungsbereich *, sieht so aus, als müssten die Dojo-Dokumente repariert werden. Und wenn Sie 2016 Code schreiben, sollten Sie [die 'bind' Methode] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) nicht verwenden 'hitch' Funktion. Oder nutzen Sie einfach die Pfeilfunktionen direkt. – Bergi
Danke für die Eingabe. Können Sie erweitern, was Sie mit Pfeilfunktionen implizieren? Es erscheint gemäß [Arrow function guide] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions): * Arrow Funktionsausdruck hat eine kürzere Syntax als Funktionsausdrücke und bindet sein eigenes nicht, arguments, super, oder new.target * – Rice
Ja, genau diese. Vielleicht möchten Sie auch unsere kanonische Frage zum Thema lesen: [Wie kann man auf den richtigen 'this/Kontext innerhalb eines Callbacks zugreifen?] (Http://stackoverflow.com/q/20279484/1048572) – Bergi