Angular JS - 在调用$ http.get的方法中阻塞,直到返回数据

时间:2015-01-28 23:10:10

标签: angularjs validation drag-and-drop typescript

据我所知,AngularJS强迫你在任何地方都是异步的,但是我遇到了拖放验证的问题:

  • 需要$ scope方法返回布尔值;
  • 该布尔值是对REST端点(ASP.NET WebAPI)的调用的结果

我使用的拖放实现是this one

简而言之,当用户开始拖动项目时,会调用一个方法来验证拖动是否有效。

在这个验证方法中,我需要调用REST端点,该端点将执行一些逻辑以确定拖动源是否能够拖放到拖动目标上。

$ http.get是异步的,这使我无法返回get的结果。

在我看来,我的拖放配置如下:

<table class="grid" style="margin-left: 15px" ui-on-drop="onDrop($event,$data,someId)" drop-validate="validateDrop($data, someId)">
<!-- rows in here -->
</table>

在控制器中,我有方法:

$scope.validateDrop = (data, someId) => {
    var res = $http.get('/some/url/that/returns/bool');
    //
    // how to return the result of the GET, and NOT a promise?
    //
    return true; //should return value of the GET
};

我考虑过的事情:

  • 可以有大量可拖动的项目,可以有多个放置目标。我不认为在加载时提取“验证矩阵”是可行的。
  • 我知道阻止不是完成的事情,但这可能是一个有效的案例

有没有办法

  • 重构验证,以便它可以支持异步调用(对此不确定,我想避免修改拖放库)
  • 强制get同步,或以某种方式阻塞,直到结果已知。

1 个答案:

答案 0 :(得分:0)

您无法绑定承诺,因此您需要解决此问题。也许在拖动开始时创建唯一ID并将拖动信息/查找结果存储在散列中。然后绑定到结果,该结果将在get promise完成时更新。