Ich brauche eine Initialisierungsfunktion, die nur einmal für ein Modul aufgerufen wird. Diese Funktion ist ein Versprechen und wird von einer Ausführungsfunktion aufgerufen. Wenn execute zweimal aufgerufen wird, muss der zweite die Initialisierung warten und dann die Ausführung fortsetzen.Wie erstelle ich eine Initialisierungsfunktion mit Versprechen?
Ich habe diesen Code geschrieben, aber der zweite Aufruf von execute wartet immer und kehrt nie zurück. Was habe ich verpasst?
var initialized = false;
var initializing = false;
var initializationPromise;
var init = function() {
initializing = true;
return q.promise(function (resolve) {
// simulate initialization
setTimeout(function() {
// initialized
initialized = true;
resolve();
}, 1000);
}).fin(function() {
initializing = false;
});
};
var execute = function() {
return q.promise(function (resolve, reject, notify) {
if (initialized) {
// already initialized
resolve();
} else {
if (!initializing) {
// initializing
initializationPromise = init().then(function() {
// simulate execution
setTimeout(function() {
resolve();
}, 1000);
}, function (reason) {
reject(reason);
});
} else {
// Wait : initializing in progress
return initializationPromise;
}
}
});
};
execute().then(function() {
// This is executed
});
execute().then(function() {
// This is never executed
});
Mit "* Diese Funktion ist ein Versprechen *" Sie bedeuten, "diese Funktion * Returns * ein Versprechen"? – Bergi