我知道承诺的状态是不可变的,所以一旦它被解决/拒绝,它就会保持在状态。但想象一下以下情况:
我正在创建一个计划应用程序。您将在某一天继续,并向API发出请求以获取计划。 API调用正在进行时创建承诺。如果找到计划,则解决承诺,并查看计划。如果没有找到时间表,则拒绝承诺,并且您会看到一条消息“未找到任何时间表。请先创建一个”。
这两条消息如何显示的标记如下:
<!-- The promise is passed to the wrapping div -->
<!-- While API is in progress, the loader directive will show an ajax loading icon -->
<!-- and will hide the content -->
<div loader="loader.promise" loader-channel="some-channel">
<!-- If loader is resolved, the the loader-success shows up -->
<div loader-success="some-channel">
<!-- If loader is rejected, the the loader-failure shows up -->
<div loader-failure="some-channel">
现在,我创建了一个计划,并希望在不重新加载页面的情况下显示新创建的计划。我需要解决之前的承诺,因为这个承诺控制着标记的不同部分。
我该怎么办?
修改
我知道我可以在我的控制器内部使用promise,并且有一个名为scope.noSchedule
的变量设置为true或false。
但是,我创建了loader
指令,以便我可以轻松地将该指令添加到我的应用程序中的任何组件。这样,每个组件的所有加载器看起来都一样,而且每次启动新组件时我都不需要重新实现它。
答案 0 :(得分:0)
不要直接在您的标记中访问承诺,使用它在范围中设置一个或两个变量,并使用标记中的变量。然后,您可以在控制器中使用一个方法来调用新的promise并重新绑定标记。像这样......
var aPromise = scheduleService.getSchedule();
aPromise.then(
function (data) { $scope.Schedule = data; },
function () { $scope.scheduleError = true; });
$scope.tryAgain = function() {
aPromise = scheduleService.getSchedule();
};