2016-09-02 4 views
-1

Arbeits ich Versprechen für meine Web-app wie this-latente Versprechen nicht

in Winkel bin mit
var deferred = $q.defer(); 

auf Erfolg -

deferred.resolve(profile); // profile = JSON object 

On Failure -

deferred.reject(1); // 1 or no value returned 

Am Ende Funktion -

return deferred.promise; 

Dann gebe ich für dieses zurückgegebene Promise-Objekt eine andere Methode aufrufen. Aber es ruft nicht. Wenn ich Callback (Fehler, Erfolg) verwende, funktioniert es gut. Kann jemand vorschlagen, was mit meinem Versprechen falsch ist.

-Code Snippet-

function open() { // for initializing DB,getting called from service 
    var deferred = $q.defer(); 
    var options = { 
     Encryption: { 
     encryptKey: false, // optional encrypt primary key 
     secrets: [{ 
      name: 'dddd', 
      key: 'xxxxxxxxxx' 
     }] 
     } 
    }; 

    var schema = { 
     stores:[{ 
     name:'profile', 
     encrypted: true 
     }] 
    }; 

    var db = new ydn.db.Storage('nowconferdb', schema, options); 

    db.onReady(function() { 
     console.log('DB is initialized'); // getting this 
     profilestorage.setDB(db); // getting called and setting DB in profilestorage service 
     deferred.resolve(true); 
    }); 

    db.addEventListener('fail', function (event) { 
     var err = event.getError(); 
     if (err.name == 'versionchange') { 
      console.log('The application is updated, please refresh to upgrade.'); 
      profilestorage.setup(db); 
     } else { 
      console.log('connection failed with ' + err.name + ' by ' + err.message); 
      db = null; // no operation can be placed to the database instance 
     } 

     deferred.reject(false); 
    }); 

    return deferred.promise; 
} 

Dies ist meine Berufung Methode -

storageservice.open().then(function() { 
    console.log('post initializing storageservice'); // not getting it. 
}); 

Vielen Dank für Ihre aufrichtigen Bemühungen.

+2

Können Sie bitte Ihre Funktion, oder zumindest Teile davon, damit wir ein wenig mehr Kontext für Ihr Problem bekommen können. – cbass

+0

Wie rufst du die nächste Funktion an? Kannst du die Linie dort einfügen, wo du eine andere Funktion anrufst, nachdem du ein Versprechen erhalten hast. – mkkhedawat

+0

Kannst du eine Geige schreiben? Es ist schwer zu verstehen, was die Problemquelle ist. –

Antwort

2

Was Sie tun sollten, ist Ihre Funktion im Erfolgsrückruf des Versprechens aufzurufen. Assumming Sie Ihr Versprechen deferred Variablen zuweisen:

deferred.then(
    function (data) { 
     // Here you call your other function/method 
     // It will be called when 'deferred' promise is resolved 
     anotherFunction(); 
    }, 

    function (error) { 
     // Handle the error 
    } 
); 

Ich hoffe, das hilft, auch wenn die Informationen, die Sie geben, ist nicht genug.

+0

Ya Alvaro, das ist Standardansatz. Kann Code in Kommentaren nicht hinzufügen, gehen Sie bitte zu DB-Initialisierungscode in diesem Link (selbe Problem- nicht bekommen "nach der Initialisierung Storageservice-Protokoll nach Versprechen) http://StackOverflow.com/Questions/39168002/ydn-db-include-issue – Kishor