Auszug – Parse JavaScript SDK bietet jetzt einen jquery-kompatiblen Promises-Modus, der die meisten asynchronen Methoden unterstützt. Was das bedeutet, werden Sie verstehen, nachdem Sie das Folgende gelesen haben.
„Versprechen“ stellen das nächste große Paradigma in der JavaScript-Programmierung dar, aber zu verstehen, warum sie so großartig sind, ist nicht einfach. Der Kern besteht darin, dass ein Versprechen ein Aufgabenergebnis darstellt, das möglicherweise erfüllt wird oder nicht. Die einzige für den Promise-Modus erforderliche Schnittstelle ist der Aufruf der then-Methode, mit der eine Rückruffunktion registriert werden kann, die aufgerufen wird, wenn das Versprechen abgeschlossen ist oder fehlschlägt. Dies wird im Allgemeinen in CommonJS Promises/A-Vorschlag. Ich möchte beispielsweise ein Prase.Object-Objekt speichern. Dies ist eine asynchrone Operation. Im alten Callback-Paradigma könnte Ihr Code so geschrieben sein:
object.save({ key: value }, { success:function(object) { // the object was saved. }, error:function(object, error) { // saving the object failed. } }); 在新的Promise范式中,同样的代码你可以这样写: object.save({ key: value }).then( function(object) { // the object was saved. }, function(error) { // saving the object failed. });
Angenommen, Sie schreiben einen Anmeldecode, der nach einem Objekt sucht und es dann aktualisiert. Im alten Callback-Paradigma könnten Sie die Pyramidencode-Vervollständigung verwenden:
Parse.User.logIn("user","pass", { success:function(user) { query.find({ success:function(results) { results[0].save({ key: value }, { success:function(result) { // the object was saved. } }); } }); } });
Parse.User.logIn("user","pass").then(function(user) { returnquery.find(); }).then(function(results) { returnresults[0].save({ key: value }); }).then(function(result) { // the object was saved. });
Fehlerbehandlung
Parse.User.logIn("user","pass", { success:function(user) { query.find({ success:function(results) { results[0].save({ key: value }, { success:function(result) { // the object was saved. }, error:function(result, error) { // An error occurred. } }); }, error:function(error) { // An error occurred. } }); }, error:function(user, error) { // An error occurred. } });
Parse.User.logIn("user","pass").then(function(user) { returnquery.find(); }).then(function(results) { returnresults[0].save({ key: value }); }).then(function(result) { // the object was saved. },function(error) { // there was some error. });
jQuery, Backbone und Parse
Es gibt jedoch etwas Interessantes zu wissen. Sie können die lange und faszinierende jQuery-Pull-Request-Diskussion hier lesen. Die Implementierung von jQuery folgt an vielen Stellen nicht vollständig den Regeln. Wenn ein Fehlerbehandler andere Informationen als nur die Rückgabe eines Versprechens zurückgibt, erwägen die meisten Implementierungen die Behandlung des Fehlers, ohne ihn weiterzugeben. Jquery denkt jedoch nicht daran, diesen Fehler hier zu behandeln, sondern gibt ihn stattdessen weiter. Obwohl Versprechen aus verschiedenen Systemen nahtlos ineinander übergehen sollten, sollten Sie dennoch vorsichtig sein. Ein mögliches Problem besteht darin, dass Versprechen im Fehlerbehandler zurückgegeben werden (und die ursprünglichen Werte ersetzen), da sie gleich behandelt werden.
doFailingAsync().then(function() { // doFailingAsync doesn't succeed. },function(error) { // Try to handle the error. return"It's all good."; }).then(function(result) { // Non-jQuery implementations will reach this with result === "It's all good.". },function(error) { // jQuery will reach this with error === "It's all good.". });
In der neuesten Version von Backbone 0.9.10 geben asynchrone Methoden jetzt ein jqXHR zurück, eine Art jQuery-Versprechen. Eines der Ziele des Parse JavaScript SDK ist es, so weit wie möglich mit Backbone kompatibel zu sein. Wir können kein jqXHR zurückgeben, da es nicht gut mit
Cloud Code funktioniert Fügen Sie eine Parse.Promise-Klasse hinzu. Sie folgt dem jQuery Deferred-Standard. JavaScript SDK analysierenIn der neuesten Version wurden alle asynchronen Methoden aktualisiert, um diese neuen Objekte zu unterstützen, und die alten Rückrufmethoden sind weiterhin verfügbar. Aufgrund der oben aufgeführten Beispiele glaube ich jedoch, dass Sie den neuen Weg bevorzugen. Also versuchen Sie es mit Versprechen!