我正在开发一个 Angular 应用程序结构,它有一个后端服务来与 Rest API(例如使用 Restangular)通信,第二个服务保存多个 Controller 的状态,最后保存 Controller 的状态。
状态持有服务应该能够解开从 Restangular 服务返回的 promise 并将数据提供给 Controller 。我希望 Controller 不知道如何接收数据,因为这是服务的责任。这就是为什么 Controller 不必解开 promise 之类的原因。
我的问题如下: 当我在状态保存服务中解开 promise 并将其写入变量时, Controller 永远不会获得正确的值。然而,当我将其写入 JavaScript 对象属性时,它最终会在 promise 解决时更新。谁能向我解释为什么行为不同?
我的 Controller :
function myModuleController($scope, myService) {
$scope.backendName1 = myService.getBackendName1();
$scope.backendName2 = myService.getBackendName2();
}
我的中介服务:
function myService(myBackendService) {
var backendName = '';
var backendObject = {
name:''
}
function getBackendName1() {
myBackendService.getBackendName().then(
function(value) {
backendName = value;
}
)
return backendName;
}
function getBackendName2() {
myBackendService.getBackendName().then(
function(value) {
backendObject.name = value;
}
)
return backendObject;
}
return {
backendName: backendName,
getBackendName1: getBackendName1,
getBackendName2: getBackendName2
}
}
骗子:http://plnkr.co/edit/A31sscAqCCcmnmHfmSLR
问题是 getBackendName1 没有得到解决, 当 getBackendName2 正在解析时。请参阅 Plunker 进行演示。
最佳答案
您在这里面临竞争条件。你有两个选择。要么使用 ui-router 进行解析,并将解析的数据注入(inject) Controller ,要么您需要从服务返回 promise 并等待 promise 在 Controller 中解析
关于javascript - 在 AngularJS 的中介服务中解开 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29346337/