解决先前被拒绝的承诺

时间:2014-11-25 01:16:23

标签: angularjs angular-promise

我知道承诺的状态是不可变的,所以一旦它被解决/拒绝,它就会保持在状态。但想象一下以下情况:

我正在创建一个计划应用程序。您将在某一天继续,并向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指令,以便我可以轻松地将该指令添加到我的应用程序中的任何组件。这样,每个组件的所有加载器看起来都一样,而且每次启动新组件时我都不需要重新实现它。

1 个答案:

答案 0 :(得分:0)

不要直接在您的标记中访问承诺,使用它在范围中设置一个或两个变量,并使用标记中的变量。然后,您可以在控制器中使用一个方法来调用新的promise并重新绑定标记。像这样......

var aPromise = scheduleService.getSchedule();

aPromise.then(
    function (data) { $scope.Schedule = data; },
    function () { $scope.scheduleError = true; });


$scope.tryAgain = function() {
    aPromise = scheduleService.getSchedule();
};