You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何等待API异步回调获取数据后再执行判断逻辑?

解决方案

你需要把判断和下单的逻辑放到回调函数内部,因为orderListChanges是异步API,只有当它的回调被触发时,才说明数据已经成功获取并可以使用。

原来的代码问题在于,if语句是同步执行的,此时orderListChanges还没完成数据请求,$scope.DocumentData.orders自然还没更新。

正确的实现方式:

// 定义回调函数,在数据就绪后执行逻辑
function handleOrderChanges(orders) {
  // 先把获取到的订单数据赋值到scope
  $scope.DocumentData.orders = orders;
  
  // 现在数据已经就绪,可以执行判断逻辑
  if (!$scope.DocumentData.orders.includes('milk')) {
    $scope.placeOrder('milk');
  }
  
  // 如果是AngularJS,记得手动触发digest循环(如果回调不在Angular上下文里)
  $scope.$apply();
}

// 调用异步API,传入回调
$scope.NativeFactory.orderListChanges(handleOrderChanges);

或者用匿名回调的写法更简洁:

$scope.NativeFactory.orderListChanges(function(orders) {
  $scope.DocumentData.orders = orders;
  
  if (!$scope.DocumentData.orders.includes('milk')) {
    $scope.placeOrder('milk');
  }
  
  $scope.$apply();
});

补充说明

  • 回调函数是这类异步API的标准用法,它的执行时机就是数据准备好的时候,完全不需要依赖setTimeout这种不可靠的延迟手段。
  • 如果你的NativeFactory回调是在AngularJS的上下文之外执行的(比如原生JS事件、第三方库回调),需要调用$scope.$apply()来通知Angular更新视图和触发后续的响应式逻辑。

内容的提问来源于stack exchange,提问作者Gjustinj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:30:57