Angular中addCategory执行顺序异常,then方法使用是否正确?
为什么addCategory会在_initAdminController的请求之后执行?
这事儿核心是异步操作的执行顺序搞反了,AngularJS里的$http是异步请求,说白了就是发起请求后不会等着它完成,代码会继续往下跑。你现在的问题大概率是没把addCategory和_initAdminController的执行逻辑用Promise正确串联起来。
先给你拆解下问题:如果你的调用代码是类似下面这样的,那肯定会出现你说的情况:
// 错误的调用方式 addCategory(); _initAdminController();
因为addCategory里的POST请求刚发出去,代码就直接去执行_initAdminController里的GET请求了,完全没等分类添加完成,自然就出现“先刷数据,后加分类”的颠倒顺序。
那then方法该怎么正确用?关键要做到两点:
- 让
addCategory方法返回$http请求的Promise(也就是$http()调用的返回值,它本身就是个Promise) - 在
addCategory的then回调里再调用_initAdminController,确保只有当分类添加成功后,才去刷新数据
给你写个正确的示例:
// 先改造addCategory,确保返回Promise function addCategory(newCategory) { // 这里一定要return $http的调用结果 return $http({ method: 'POST', url: 'http://testserver.com:8...', data: newCategory // 你的分类数据 }); } // 调用的时候这么写 addCategory(/* 传入分类数据 */) .then(function(response) { console.log('分类添加成功'); // 只有添加成功后,才执行初始化刷新 _initAdminController(); }) .catch(function(error) { // 别忘了处理添加失败的情况 console.error('添加分类失败了:', error); });
再给你划个重点:你之前的错误本质是把异步操作当成同步来写了。$http发起请求后会立刻返回Promise,但请求本身还在后台跑,只有当Promise进入resolved状态(请求成功),then里的回调才会执行。把_initAdminController放在then里,就能严格保证执行顺序:先完成分类添加,再刷新数据。
最后再检查下你的代码:
- 确认
addCategory里有没有return$http的结果,别把Promise吞了 - 确认调用时是在
then里触发_initAdminController,而不是直接在addCategory()之后同步调用
内容的提问来源于stack exchange,提问作者help
相关产品推荐
相关产品推荐

