浅谈自己对异步交互、同步交互的理解

同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;
异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。
这是我在网上看到的,但是感觉还是不够生动,后来就和朋友进行交流了一下。朋友跟我说了很多生活中的示例,方便我理解。我最终得出一个结论:异步是同一件事在同一时间段不连续的完成,而同步是同一件事在同一时间段连续的完成。
举个例子吧:
比如聊天:
小明:发了一个消息给小红;在发消息之前,小红是在写代码的,当小红收到小明的消息时,回复了小明。然后继续写自己的代码,而不是停下来等小明的回复,小明回复了小红,小红就会回复小明,否则小红一直在做自己的事,这个聊天的过程就是一个异步的交互。
看到这里大家应该会很容易想到我们平时前端页面和后台交互的Ajax请求,前端页面会通过Ajax发送一个请求给后台

 var url = 'Ajax/Json.aspx?Handler=ServiceProxy&Entity=SalePlan&Method=GetSaleTodayDetailList';
           $.post(url, { OrgID: org, SaleType: sale }, function (data) {
               if (data.Rows == "") {
                   $('.food-list').html("<div style='text-align:center;margin-top:40px'><img src='Resource/images/diqiu.png'/><p>没有内容!管理员可能去外星了!</p></div>");
               } else {
                   $('.food-list').html(FoodListTemplate(data));
                   TabooLabel(sale);
                   AddImg();
                   AddRecommendOption("radius-img");
               }
           }, 'json');

当后台接收到前端的请求,会进行回复(后台回复前端的请求有一个时间段,如果在这段时间里面,前端一直在等待后台的回复,那么就是同步;如果前端在等待后台的回复的同时,还在处理别的事,那么就是异步)。
看到这里,会让我很容易想到回调,当某件事成功后返回一个结果,接收到这个结果,就会进行下一步。
这段时间 ,一直在用AngularJs写代码,就想到了里面的promise对象,这里就会用到angularJs的内置服务$q,

getCodeTableList: function (CodeCategory) {
            var deferred = $q.defer(); //声明延后执行       
            $.post("Ajax/Json.aspx?Handler=ServiceProxy&Entity=CodeTable&Method=GetCodeTableList", { "CodeCategory": CodeCategory }, function (data) {
                var result = [];
                for (var i = 0; i < data.Rows.length; i++) {
                    var list = {};
                    list.text = data.Rows[i].CodeName;
                    list.id = data.Rows[i].CodeValue
                    result.push(list)
                }
                deferred.resolve(result); //声明执行成功
            });
            return deferred.promise;//返回一个promise对象
        },

在使用promise对象时,我们需要先声明一个deferred对象,当执行成功时,我们会调用

deferred.resolve();

最后返回一个promise对象

return deferred.promise

在控制器里面,我们会对返回的结果进行处理,

 ServiceList.getCodeTableList("ExpenseStandard").then(function (res) {
            $scope.config2 = {
                data: res,
                placeholder: '消费标准'
            };
        })

当接收到成功的结果,我们就会调用.then方法,进行下一步数据的处理,平时我们就是对成功事件作出处理,但是实践上,then中有三个参数,分别是成功回调、失败回调、状态变更回调。

.then(function(value){
                console.log("in promise1 ---- success");
                console.log(value);
            },function(value){
                console.log("in promise1 ---- error");
                console.log(value);
            },function(value){
                console.log("in promise1 ---- notify");
                console.log(value);
            })

这就是我目前的浅显的理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值