Angularjs Angular JS-在返回数据之前阻止调用$http.get的方法

Angularjs Angular JS-在返回数据之前阻止调用$http.get的方法,angularjs,validation,drag-and-drop,typescript,Angularjs,Validation,Drag And Drop,Typescript,我知道AngularJS强迫您在任何地方都是异步的,但我遇到了拖放验证的问题: 需要$scope方法返回布尔值 该布尔值是调用REST端点(ASP.NET WebAPI)的结果 我使用的拖放实现是 简而言之,当用户开始拖动项目时,将调用一个方法来验证拖动是否有效 在这个验证方法中,我需要调用一个REST端点,该端点将执行一些逻辑,以确定可以将哪些拖动源拖放到拖动目标上 $http.get是异步的,这使我无法返回get的结果 在我看来,我将拖放配置为: <table class="gri

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

  • 需要$scope方法返回布尔值
  • 该布尔值是调用REST端点(ASP.NET WebAPI)的结果
我使用的拖放实现是

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

在这个验证方法中,我需要调用一个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>
我考虑过的事情:

  • 可以有大量可拖动的项目,这些项目可以有多个放置目标。我认为加载“验证矩阵”是不可行的
  • 我理解阻止不是已经做过的事情,但这可能是一个有效的案例
有什么办法可以做到这一点吗

  • 重新构造验证,使其能够支持异步调用(对此不确定,我希望避免修改拖放库)
  • 强制get同步,或者以某种方式阻塞,直到知道结果

你不能拘泥于承诺,因此你需要解决这个问题。可能在拖动开始时创建唯一ID,并将拖动信息/查找结果存储在散列中。然后绑定到“获取承诺”完成后将更新的结果。

可拖放项是动态创建的还是预定义的?如果它们是预定义的,您可以在最初获取时向每个项添加一个有效目标数组,这样就避免了不必要的API调用。你首先需要考虑你正在经历的用户体验。假设$http调用需要10秒——用户体验如何?是否发生跌落,然后在出现错误时反弹?还有别的经历吗?这很可能不适用于drop验证所设想的正常场景,并且您可能需要实现更高级别的验证结构来支持您正在构建的内容。对于UI来说,阻塞永远不是有效的情况
$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
};