【问题标题】:deferred promise not working延期承诺不起作用
【发布时间】: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

标签: angularjs promise


【解决方案1】:

你应该做的是在 promise 的成功回调中调用你的函数。假设您将您的承诺分配给deferred 变量:

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
    }
);

我希望这会有所帮助,即使您提供的信息还不够。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2017-04-29
  • 2016-06-07
  • 2016-06-16
  • 2016-05-07
  • 2015-01-22
相关资源
最近更新 更多