正如演示所示,当我在服务中定义我的承诺并将其返回时(演示中的promise1),它根本无法解决。
但是当我在控制器中定义承诺(演示中的promise2)时,它运作良好。为什么?
hidden
答案 0 :(得分:2)
每当您致电serv.getDefer()
时,它都会返回一个新的自定义对象,在您的承诺1中,您致电serv.getDefer()
同时创建defer1
和promise1
。 2个变量现在不是相同的承诺,因此当您解析defer1
时,promise1
的承诺仍未得到解决。
promise2
是defer2
的承诺,因此当您解决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;