簡體   English   中英

Javascript / AngularJS-等待回調完成執行

[英]Javascript/AngularJS - Wait for a callback to finish executing

我有一個名為Progress的服務,該服務帶有一種名為confirmation的方法,該方法接受Progress.confirmation(message, accepted, rejected) ;

到目前為止,該功能是:

if (!_.isString(message)) {
    console.warn('No confirmation message was provided');
    return false;
}

$rootScope.confirmation.message = message;
$('#confirmation').foundation('reveal', 'open');

// User confirms. If accepted() is provided, then run it
$rootScope.confirmationAccept = function() {
    if (_.isFunction(accepted)) accepted();
    $('#confirmation').foundation('reveal', 'close');
};

// User confirms. If rejected() is provided, then run it
$rootScope.confirmationReject = function() {
    if (_.isFunction(rejected)) rejected();
    $('#confirmation').foundation('reveal', 'close');
};

$rootScope.confirmationAccept()$rootScope.confirmationReject()這兩個函數只是確認顯示頁面中的檢查/取消按鈕。

我想要做的是在關閉顯示頁面之前等待accepted() / rejected()執行。 我怎樣才能做到這一點?

由於我傳遞了這兩個函數,因此我不能真正依靠編碼人員記住使用$q延遲,因此我認為這不是一個選擇嗎? 另外,我不能依靠回調函數返回值,所以我不能等待/觀察返回的值。

謝謝

您可以使用$ broadcast收聽更改嗎?

目前還不清楚您的要求是什么。

這確實應該是一個指令。 您上面的確認模態案例應該直接做出指示,這樣您就不會受到魔法dom操縱或Rootscope污染。

通常,您會將這種邏輯封裝在如下指令中:

<confirm-modal open="confirmationOpen" success="successCb()" abort="abortedCb" custom-message="'myCustomMessage'">
<button ng-click="launchConfirmation()">Click me or launch from controller</button>

這使您的控制器可以管理狀態。

$scope.launchConfirmation() {
  $scope.confirmationOpen = true;
}

$scope.successCb() {
  //They Confirmed
  //Do Async stuff
  myAsync().then(function() {
    $scope.confirmationOpen = false;
  });
}

$scope.abortCb = function() {
  //nothing async here
  reset();
  $scope.confirmationOpen = false;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM