427 messaggi dal 13 novembre 2009
Salve,
una domanda forse banale per chi sa di hybrid app e angularjs.

var jsonArray = [];
$.when(
$cordovaFile.readAsText(cordova.file.dataDirectory, $scope.filemane)
.then(function (success) {
jsonArray = $.parseJSON(success);
}, function (error) {
jsonArray = [];
});
).done(function() {
alert(jsonArray.length);
});

Non interessa se la promessa è ok o in errore; jsonArray è pieno se è OK, è vuoto se in errore. La logica è che l'alert dovrebbe scattare solo quando la cordova promise è terminata.
Vi fila?

grazie
Modificato da flaviovb il 05 settembre 2018 13.57 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, non ho ben capito il problema. Non ti viene eseguita la callback che hai indicato sul done?
Prova con finally se vuoi eseguire codice a prescindere che la promise si sia conclusa con successo o con errore.

var jsonArray = [];
$cordovaFile.readAsText(cordova.file.dataDirectory, $scope.filemane)
  .then(function (success) {
      jsonArray = $.parseJSON(success);
    }, function (error) {
      jsonArray = [];
    })
  .finally(function() {
    alert(jsonArray.length);
  });

Enjoy learning and just keep making
427 messaggi dal 13 novembre 2009
BrightSoul ha scritto:
Ciao, non ho ben capito il problema. Non ti viene eseguita la callback che hai indicato sul done?
Prova con finally se vuoi eseguire codice a prescindere che la promise si sia conclusa con successo o con errore.

var jsonArray = [];
$cordovaFile.readAsText(cordova.file.dataDirectory, $scope.filemane)
  .then(function (success) {
      jsonArray = $.parseJSON(success);
    }, function (error) {
      jsonArray = [];
    })
  .finally(function() {
    alert(jsonArray.length);
  });
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
non vedo il testo della tua risposta.

Enjoy learning and just keep making
427 messaggi dal 13 novembre 2009
La mia domanda forse era posta male. La tua risposta con l'utilizzo del finally la trovo corretta naturalmente. La mia era solo una richiesta di confronto circa se utilizzare finally o $.when().done() tenuto conto che se in $.when() trova posto solo una promise a quel punto immagino che non ci siano differenze. In altri tempi se dovessi attendere il completamente di + promise non vedo alternative all'utilizzo di $.when, ma se la promise è una sola forse tanto vale utilizzare finally.

grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Flavio, in alternativa puoi usare Promise.all.

Esempio:
Promise.all([promise1, promise2, promise3]).then(function(data) {
  //data è un array di 3 elementi
});

Enjoy learning and just keep making
427 messaggi dal 13 novembre 2009
Interessante, è Ecma5 sperando cmq che chi usa MS abbia Edge!
11.886 messaggi dal 09 febbraio 2002
Contributi
Sì, ovviamente fai sempre riferimento a url="http://kangax.github.io/compat-table/es5/"]questo sito[/url] per capire cosa è supportato e da quale browser.
Per le Promise esistono anche dei polyfill, che introducono la funzionalità anche per i browser che non la supporterebbero. Vedi ad esempio:
https://github.com/taylorhakes/promise-polyfill

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.