为什么我的 $q.defer().resolve 不起作用?
Why doesn't my $q.defer().resolve work?
如演示所示,当我在服务中定义我的承诺并 return 返回(演示中的 promise1)时,它根本没有解决。
但是当我在控制器中定义 promise(演示中的 promise2)时,它起作用了 good.Why?
serv.getDefer = function() {
var defer = $q.defer();
return {
defer: defer,
promise: defer.promise
}
}
var defer1 = serv.getDefer().defer;
var promise1 = serv.getDefer().promise;
promise1.then(function() {
alert('promise1 should work,but doesnt')
})
defer1.resolve();
var defer2 = serv.getDefer().defer;
var promise2 = defer2.promise;
promise2.then(function() {
alert('promise2 works good')
})
defer2.resolve();
每次你调用 serv.getDefer()
它 returns 一个新的延迟对象,在你的承诺 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();
promise1 不是由 defer1 生成的。相反,您将通过再次调用 getDefer() 创建一个新的延迟对象。
promise2 有效,因为它是由 defer2.promise()
生成的
我觉得应该是
var promise1 = defer1.promise;
查看闭包,第二次调用函数 getDefer() 时,它创建了一个新变量,returns 它。
但是,这可能有效(虽然未测试)
var deferred = serv.getDefer();
deferred.promise.then(function() {
alert('promise1 should work,but doesnt')
});
deferred.defer.resolve();
如演示所示,当我在服务中定义我的承诺并 return 返回(演示中的 promise1)时,它根本没有解决。
但是当我在控制器中定义 promise(演示中的 promise2)时,它起作用了 good.Why?
serv.getDefer = function() {
var defer = $q.defer();
return {
defer: defer,
promise: defer.promise
}
}
var defer1 = serv.getDefer().defer;
var promise1 = serv.getDefer().promise;
promise1.then(function() {
alert('promise1 should work,but doesnt')
})
defer1.resolve();
var defer2 = serv.getDefer().defer;
var promise2 = defer2.promise;
promise2.then(function() {
alert('promise2 works good')
})
defer2.resolve();
每次你调用 serv.getDefer()
它 returns 一个新的延迟对象,在你的承诺 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();
promise1 不是由 defer1 生成的。相反,您将通过再次调用 getDefer() 创建一个新的延迟对象。
promise2 有效,因为它是由 defer2.promise()
生成的我觉得应该是
var promise1 = defer1.promise;
查看闭包,第二次调用函数 getDefer() 时,它创建了一个新变量,returns 它。
但是,这可能有效(虽然未测试)
var deferred = serv.getDefer();
deferred.promise.then(function() {
alert('promise1 should work,but doesnt')
});
deferred.defer.resolve();