ajax异步调用封装成一个公用的方法,调用时如何等它执行完毕后再执行其它语句或方法

枕戈待旦勇往直前 2017-09-26 08:30:17
如题所描述,获取A列表的方法是一个ajax的异步调用,因为项目中多个模块都需要用到,所以封装在service.js中标记为方法 A()。

项目中某模块调用该方法时如下:
function test (){
$scope.getALists = service.A(); //因为A为异步调用,所以执行下一句时总为$scope.getALists值总为undefined
if($scope.getALists){
//进行处理
}
}

解决方法除了 (1)方法A的ajax调用改为同步 (2)设置全局变量来判断接口是否获取成功,用setInterval来不断获取

请教其它合适的方法。(前端为angularJs)

...全文
1059 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tong-wl 2017-09-28
  • 打赏
  • 举报
回复
第一个是上述所说的回调,第二个看楼主需求可以看看jquery的promise。
  • 打赏
  • 举报
回复
A方法改同步,要么A改为可以传入回调的形式

Web开发学习资料推荐
通过Access-Control-Allow-Origin控制允许ajax跨域请求的域名
ajax对象属性withCredentials
clark_kidd 2017-09-27
  • 打赏
  • 举报
回复
 function test (){
         service.A(function(ALists){
     if(ALists){
                 //进行处理
          }
  });
}

service = {
A:function(callback){

                 callback($scope.getALists)
    
}
}
jio可 2017-09-27
  • 打赏
  • 举报
回复
回调响应后再执行
繁华终归落尽 2017-09-27
  • 打赏
  • 举报
回复
楼上说的都是对的,要不然同步,要不然传入回调
天际的海浪 2017-09-27
  • 打赏
  • 举报
回复
给 A()方法加个回调函数,所有的后续操作都在回调函数中进行
别闹腰不好 2017-09-27
  • 打赏
  • 举报
回复
方法中传入一个方法调用方式是。 callback.call()
天际的海浪 2017-09-27
  • 打赏
  • 举报
回复
例如:
service.A = function (callback) {
	$.ajax({
		url: "xxxxxxxxxxxxx",
		type: "POST",
		success: function (data) {
			callback(data);
		}
	});
}
function test() {
    service.A(function (data) {
	    $scope.getALists = data;
        //所有后续处理都在这里进行
    });
    //这后面不要进行任何与获取的数据有关的操作
}
test();
//这后面也同样的不要进行任何与获取的数据有关的操作

87,989

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧