Es ist wirklich schwer zu Grunde zu wissen, was Sie hier ohne konkretes, reale Welt Beispiel tun. Dies ist definitiv kein Muster, das ich sehr oft in meinem Code verwende, daher habe ich den Verdacht, dass Sie es beheben könnten, indem Sie Ihre Annahmen neu bewerten.
Das gesagt, Sie können Versprechen Verkettung verwenden. Beachten Sie in diesem Fall, dass "promiseThatLoadsVar" ein Versprechen ist, es ist keine Funktion, die ein Versprechen zurückgibt. Das bedeutet, dass es einen Zustand beibehält, und das zweite Mal, wenn dieser Code weiterläuft, wird er sofort zurückkehren.
Wenn Sie eine klarere Frage stellen könnten, würde ich gerne eine klarere Antwort für Sie bereitstellen.
Bearbeiten: Ich möchte auf das in den Kommentaren gestellte Beispiel näher eingehen. Hier ist eine Lösung, die die Bibliothek LoDash verwendet. (BTW, sollten Sie lodash oder Unterstreichung verwenden, sie sind im Grunde die Standardbibliothek von Javascript).
var getData = _.once(function() { return $.getJSON(...) });
$('button').on('click', function() {
getData().then(function(data) { showDialog(data) })
})
Hinweis hier, dass getData
eine gewickelte Funktion, dass nach dem ersten Aufruf wird nur die gleiche Sache immer und immer wieder zurückkehren, ohne die Funktion erneut aufrufe. Wenn Sie es das erste Mal aufrufen, wird ein Versprechen zurückgegeben, das beim Abrufen der Daten aufgelöst wird. Das zweite Mal erhalten Sie wieder das gleiche Versprechen, die wahrscheinlich bereits gelöst werden.
Möchten Sie Parameter an getData
übergeben?
var getData = _.memoize(function(id) { return $.getJSON(url+id) });
$('button').on('click', function() {
getData($('#selector').val()).then(function(data) { showDialog(data) })
})
Dies wird das Gleiche tun, aber die Versprechen der ersten Eingangsparameter Cache getData
geben.
oops - sind diese jQuery verspricht oder eine neue „Standard“ Versprechen? – Alnitak
Meine Frage soll agnostisch sein, damit die Antwort die beste Lösung vorschlagen kann! Verwenden Sie einfach den besten Standard oder nicht Promise oder Deferred oder irgendetwas anderes, das Sie mögen. –