繁体   English   中英

解决先前被拒绝的承诺

[英]Resolving a previously rejected promise

我知道承诺的状态是不可变的,因此一旦解决/拒绝了它,它就会停留在该状态。 但是,请设想以下情形:

我正在创建一个调度应用程序。 您在给定的一天去,向API提出请求以获取时间表。 在进行API调用时会创建一个Promise。 如果找到了时间表,那么诺言就解决了,您将看到时间表。 如果未找到时间表,则承诺将被拒绝,并且您会看到一条消息“找不到时间表。请先创建一个时间表”。

这两个消息如何显示的标记如下:

<!-- 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">

现在,我创建一个日程表,并希望在不重新加载页面的情况下显示新创建的日程表。 我需要解决之前的承诺,因为该承诺控制标记的不同部分。

我能做什么?

编辑

我知道我可以在控制器内部使用scope.noSchedule ,并将变量名为scope.noSchedule设置为true或false。

但是,我创建了loader指令,以便可以轻松地将该指令添加到应用程序中的任何组件。 这样,每个组件的所有加载程序看起来都一样,而且每次启动新组件时也不需要重新实现它。

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

var aPromise = scheduleService.getSchedule();

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM