【发布时间】:2016-09-02 11:43:09
【问题描述】:
我正在为我的网络应用程序使用 Angular 中的 Promise-
var deferred = $q.defer();
成功时 -
deferred.resolve(profile); // profile = JSON object
失败 -
deferred.reject(1); // 1 or no value returned
函数结束-
return deferred.promise;
然后我正在处理这个返回的 Promise 对象来调用另一个方法。但它没有调用。虽然如果我使用 Callback(error,success) 它工作正常。有人可以建议我的承诺有什么问题。
代码片段-
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;
}
这是我的调用方式——
storageservice.open().then(function() {
console.log('post initializing storageservice'); // not getting it.
});
非常感谢您的真诚努力。
【问题讨论】:
-
您能否提供您的功能,或至少提供部分功能,以便我们为您的问题提供更多背景信息。
-
你如何调用下一个函数?收到承诺后,您能否将行粘贴到您正在调用另一个函数的位置。
-
你能发一个小提琴吗?很难理解问题的根源是什么。
-
向我们展示您使用返回的承诺的实际代码。这很可能是您错误的地方。
-
无法在 cmets 中添加代码,请转到此链接中的数据库初始化部分(同样的问题 - 承诺后未收到“初始化存储服务后”日志)stackoverflow.com/questions/39168002/ydn-db-include-issue