簡體   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