如何等待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
相关产品推荐
相关产品推荐

