如果要理解回调,需要在分同步通信、异步通信的基础上了解

举个通俗的例子:

你打电话问书店老板有没有《JS》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

同步是阻塞模式,异步是非阻塞模式,在程序设计中,特别是用户交互功能上采用非阻塞模式的异步可以有效的提高用户的使用满意度,比如我们在手机端提交一个订单,点击提交后,首先是看到按钮被禁用,稍后提示成功下单。

同样是这个下单的例子,如果让下面的模式设计可能效果就不一样了:

  • 整个过程采用同步方式,点击提交按钮,程序开始同步访问网络,阻塞模式被启用,程序当前类似死机卡着不动,但看上去还好像正常,只是对任何用户操作都无法响应。大约4、5秒以后提示成功或失败。
  • 整个过程仅仅采用异步模式,用户点击提交按钮后程序返回已提交,程序开始后台处理网络请求。

第一种情况肯定是糟糕的用户体验,用户交互被短时间的暂停,用户点击按钮后没有任何反馈,也无法预测接下来是什么状况,给人一种出了问题的印象。

第二种情况也好不到哪里去,用户是立马获得了反馈,但是这种反馈过于突然,尽管如此,用户下意识觉得应该没问题。但一旦经过一段时间的使用才发觉实际上当初的操作结果其实不是预期的,糟糕的用户体验也莫过如此了。其实这个过程就是因为缺少了及时 “回调”。

关于回调(callback)的更多相关文章

  1. [转] Java内部类之闭包(closure)与回调(callback)

    闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为它 不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥 ...

  2. python的回调callback

    python的回调callback很强大,特别是函数参数可以是kw,因为一个函数编译后对应函数对象,函数对象中包含了参数的信息,当你调用函数时,会判断传入参数是否正确.通过导入模块,可以使用模块中的函 ...

  3. 【Android 应用开发】Android中的回调Callback

    回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 例如给安卓添加按钮点击事件, 我们创建了OnC ...

  4. 安卓程序代写 网上程序代写[原]Android中的回调Callback

    回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 1. 如何定义一个回调 a. 定义接口 : 在 ...

  5. js方法传入对象;js方法传入方法;js方法回调 callback

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Android中的回调Callback

    回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 例如给安卓添加按钮点击事件, 我们创建了OnC ...

  7. java与安卓中的回调callback学习笔记

    1.回调的简单设计如下: package com.listercai.top; public class A { private CallBack callBack; private AnotherC ...

  8. C++中回调(CallBack)的使用方法(其实就是类方法指针,我觉得你的方法易用性不好,虽然原理正确)

    回调函数是一个很有用,也很重要的概念.当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数.回调函数在windows编程使用的场合很多,比如Hook回调函数:MouseProc,GetMsgP ...

  9. 理解JS中的回调(Callback)函数

    今天写代码时写了一个函数,想实现Nodejs查询pgSQL的数据查出来并把结果作为返回值,结果发现拿不到这个值,查了下资料才恍然大悟,这是Nodejs的最大特性--非阻塞! 查询数据操作作为比较消耗资 ...

随机推荐

  1. 服务器cpu100%问题分析

    ecs 130 : slb:

  2. 【Spring】浅谈spring推荐构造器注入

    一.前言 ​ Spring框架对Java开发的重要性不言而喻,其核心特性就是IOC(Inversion of Control, 控制反转)和AOP,平时使用最多的就是其中的IOC,我们通过将组件交由S ...

  3. AspxGridView控件的使用

    在网上找到的不错的资料: http://www.lmwlove.com/ai/SubjectID6 以下是自我总结: 要实现的功能:使用AspxGridView显示Scott数据库中emp与dept两 ...

  4. 表达式求值--Java实现

    /*将中缀表达式--转化为后缀表达式--属于栈的一种应用 *具体思路: *1.扫描字符串,遇到操作数字符直接不管,存到一个字符串里边 *2.操作符优先级比较--定义了方法 * 栈中优先级高:出栈存进字 ...

  5. 媲美jQuery的JS框架----AngularJS(二)

    前言 对于AngularJS什么,小编在这就不多做介绍了.大家可以看小编的上一篇博客. 言归正传,小编在上一篇博客中介绍了AngularJS中的指令.表达式还有非常实用的三种服务.接下来,带大家看一看 ...

  6. AsyncTask学习

    在学习Android的时候,开始用到比较多的异步处理的类大概就是AsyncTask,但是我们很多时候只知道调用,却不知道思考一些东西. 本文就简单的总结和分析了一些AsyncTask的知识. 一.As ...

  7. iPhone X 适配解决方案

    在head里添加<meta name='viewport' content='initial-scale=1, viewport-fit=cover'> 这将导致一个页面允分利用iPhon ...

  8. 使用OpenCV训练Haar like+Adaboost分类器的常见问题

    <FAQ:OpenCV Haartraining>——使用OpenCV训练Haar like+Adaboost分类器的常见问题 最近使用OpenCV训练Haar like+Adaboost ...

  9. 快速配置vs2012+opencv

    关于OpenCV+Windows+VS配置的文章网上有很多,多是类似 OpenCV中文网 上的安装方法. 不管什么方法,配置的步骤毫无疑问是: 1. 配置环境变量, 2. 配置VS. 在这个过程中,令 ...

  10. 全站HTTPS简单实践

    第一个里程碑:创建https证书 [root@web01 backup]# openssl req -new -x509 -nodes -out server.crt -keyout server.k ...