为什么我的$ q.defer()。解析不起作用?

时间:2016-04-05 08:34:40

标签: javascript angularjs asynchronous promise q

正如演示所示,当我在服务中定义我的承诺并将其返回时(演示中的promise1),它根本无法解决。

但是当我在控制器中定义承诺(演示中的promise2)时,它运作良好。为什么?

this is my demo on codepen

hidden

3 个答案:

答案 0 :(得分:2)

每当您致电serv.getDefer()时,它都会返回一个新的自定义对象,在您的承诺1中,您致电serv.getDefer()同时创建defer1promise1。 2个变量现在不是相同的承诺,因此当您解析defer1时,promise1的承诺仍未得到解决。

第二个示例中的

promise2defer2的承诺,因此当您解决defer2时,承诺将得到解决。

要解决此问题,您必须执行以下操作:

var deferred = serv.getDefer(),
    defer1 = deferred.defer
    promise1 = deferred.promise;

promise1.then(function() {
  alert('promise1 should work,but doesnt')
});

defer1.resolve();

答案 1 :(得分:2)

查看闭包,第二次调用函数getDefer()时,它会生成一个新变量并返回它。

然而,这可能有效(尽管未经过测试)

var deferred = serv.getDefer();
deferred.promise.then(function() {
    alert('promise1 should work,but doesnt')
});
deferred.defer.resolve();

答案 2 :(得分:1)

promise1不是由defer1生成的。相反,您通过再次调用getDefer()来创建新的延迟对象。

promise2有效,因为它是由defer2.promise()

生成的

我认为该行应该是

var promise1 = defer1.promise;