gpt4 book ai didi

javascript - 在 AngularJS 的中介服务中解开 Promise

转载 作者:行者123 更新时间:2023-12-03 10:27:38 25 4
gpt4 key购买 nike

我正在开发一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com