同学们大家好,我是小伊同学,前面我们学习了小程序中Js的基本知识,在这些基础上Js中还有很重要的一部分内容就是小程序的API,本节我们就首先来学习一下API的类型和语法结构。

首先,我们先来介绍一下,什么是API。API的英文全称是ApplicationProgramming Interface,翻译成中文叫做应用程序编程接口。

API实际上是一些预先定义的函数,即一些特定的功能模块。这些模块能够使得开发人员直接使用,从而获取这一功能。开发人员不需要指导这个功能具体是如何实现的,更不需要看到代码,只要在需要的地方直接使用即可。这种方式极大地降低了开发难度和工作量,但相应也牺牲了一部分灵活性。但对于其带来的好处来说,这一部分缺点几乎可以被忽略。

小程序开发框架提供丰富的微信原生 API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等,详细介绍同学们可以参考API文档。

通常,在小程序API有以下几种类型:

  • 事件监听API  在微信小程序中规定以 on 开头的 API 用来监听某个事件是否触发,如:wx.onCompassChange等。这类API接收一个回调函数作为参数,当事件触发时会调用这个回调函数,并将相关数据以参数形式传入。

  • 同步API  微信规定,以 Sync 结尾的 API 都是同步API,比如在处理存储方面的api,但是并不绝对,此外还有一些api也是同步的,详情参见API文档中的说明。同步API 的执行结果可以通过函数返回值直接获取,如果执行出错会抛出异常。

  • 异步API  我们常用的大多数 API 都是异步 API。这类 API 接口通常都接受一个 Object 类型的参数,这个参数都支持按需指定一些字段来接收接口调用结果。

需要说明的是,同步API和异步API是相互对立的两种类型,而事件监听API是独立于两者的一种定义方式,其与后两者并不是并列无交集的。

对于同步API,是说在执行到这个api的地方后,系统主线暂停,等待执行完api后再继续向下运行。而异步api则是当执行到api后,系统代码并不停止运行,而是继续向下,对于api的部分,系统会相当于启动一个分支进行执行,这个分支和原本的主线是分离的,对于分支的运行结果,主线是并不知道的,也无法获知其在什么时候能够运行完毕的。因此,我们在使用的时候,要尽量避免因为异步api带来的代码错误或数据延迟。

那么我们应该如何避免呢?下面我们就来介绍一下异步api的基本结构,因为在本项目中,我们使用到的全部都是异步api,因此,另外两种的细节我们不做过多介绍了,想学习的同学可以通过微信开发者文档进行学习。如右图所示,就是刚才我们讲的异步api执行过程。

对于异步api,不同的api的内容不同,但主要语法格式如下所示。在api的内容部分,可以有三部分代码,分别是success部分、fail部分和complete部分。这三部分我们称之为api的回调函数,即在api执行到相应节点时会返回到这里执行这些函数。其中,success为接口调用成功的回调函数,fail为接口调用失败的回调函数,complete为接口调用结束的回调函数,它不管调用成功还是失败都会执行。

同学们请看中间的示例,这是一个微信登录的api,其功能是使小程序获得用户的部分与身份有关的信息。当登录成功时,执行success部分代码。当登陆失败后,执行fail部分的代码。当api调用完成后,无论成功还是失败,都会执行complete部分的代码。

这三部分的执行顺序为:success和fail部分二选一执行,根据api的调用结果由系统自动进行判断。执行其中一部分代码后再执行complete部分代码,每段代码内部均为顺序执行,除非再次调用异步api又会产生分支。

因此,回到之前那个问题,如何避免因为api异步带来的代码错误或数据延迟。那么我们的思路就是将主线任务转移到支线上,使主线任务到api调用就结束了,而支线任务中,通过将代码写在上面这三部分,从而使得代码顺序执行,无论是这三部分的哪一部分,在开始执行之前,能够确保已经知道api的调用结果了。当然,这三部分都不是必须的,不写也可以,根据功能需求填写使用。

对于上述三个回调函数:success,fail和complete函数,调用时可以传入一个Object类型参数,这个Object类型中有什么内容,我们又为什么需要这样一个参数呢?

我们已经知道这三部分分别在api调用成功、失败和完成时执行,但是我们是不是还应该知道一些具体信息呢?比如调用失败,如果可以知道失败原因,是不是就可以继续编写代码解决这个问题呢,比如重试一次。这就是我们使用这个参数的意义。通常这个参数中会包含两部分,一个是错误信息,其属性为errmsg,类型为string,另一个是errcode,类型为number,代表错误码。如果成功,那么这两部分则分别为ok和0。此外,这个参数中还可能包含一些其他信息,比如网络请求的api,获取用户身份信息的api,在成功时要能够看到请求到的数据,那么也会通过这个参数来传递。

一般,我们将这个参数写作res,是response的缩写,我们在每一部分中使用res加点加属性名称就能够访问,例如这里在执行失败的时候,我在调试窗口打印输出了一些错误信息。console.log为打印函数,将打印括号中变量的值,括号中我使用res加点加属性名访问了错误信息。

对于不同的api,参数中的信息也各不相同,大家在使用时可以通过微信开发者文档去查询一下。另外,这些参数也不是一直不变的,微信团队也会对其进行修改增删,因此,为了保证我们在编写代码的时候不出问题,建议大家使用前先查阅该api的使用说明。

日拱一卒,功不唐捐。涓流所积,终成沧海。

想看视频版?

关注公号“微程序学堂”,我们的视频教程即将上线

如果你自己写了好文章想投稿

请联系我们

微信小程序云开发教程-微信小程序的API入门-API的类型和语法结构相关推荐

  1. 微信小程序云开发教程-微信小程序框架的介绍

    同学们大家好,我是小伊同学,今天我们来学习微信小程序框架. 微信小程序实质上是一款基于web技术的应用程序,他和我们平常所接触到的前端网页是大同小异的.相同点在于他们使用的开发语言,代码结构以及代码的 ...

  2. uniapp同步获取用户信息_微信小程序云开发教程微信小程序的API入门获取用户身份信息系列API...

    同学们大家好,我是小伊同学,上一节我们介绍了一些常用API,今天我们接着来学习一组API,那就是获取用户身份信息的API. 在微信小程序中,我们往往需要获取用户的身份信息,比如昵称.头像.性别.地区等 ...

  3. 页面url带参数_微信小程序云开发教程微信小程序的JS高级页面间数据传递

    同学们大家好,我是小伊同学,上一节课我们讲解了全局数据的读写方法,那么在页面间同样需要数据交互,今天我们就来学习这部分内容. 在微信小程序中,我们常常需要将数据在页面之间进行传递,比如用户的身份信息, ...

  4. ❤️微信小程序 云开发 教程合集(视频+图文)免费❤️

    一.视频版 微信小程序云开发视频教程上线啦 二.图文版 (1)预备知识 1. 怎么注册开通个人微信小程序 2. 微信小程序云开发教程-互联网软件的运作模式 3.微信小程序云开发教程-云开发对微信小程序 ...

  5. 基于微信小程序云开发的投票小程序源码,图文投票微信小程序源码

    功能介绍 投票活动十分火,商家,企业,机构偶尔都会来一场投票活动评选,本小程序支持图文投票,简单方便.随时随地完成投票,可以方便设定投票模式(按天按全程,投票数限定). 本代码前后端完整代码包投票列表 ...

  6. 微信小程序云开发成绩查询小程序的制作过程。

    微信小程序云开发成绩查询小程序的制作过程. 如果觉得我讲的好可以点个关注. 明确自己的目的,到底要做一个怎么样的小程序. 我先上效果图: 确定后就可以开始自己布局.主要是用css 1.先看首页,首页主 ...

  7. 小程序云开发教程七:贴子的详情及评论功能

    我们先看看界面: 我们如果要实现评论功能, 先看一下总的数据结构: 那么需要什么参数呢? 参数如下 comment: 评论内容username: 用户名time: 评论时间userId: 用户idid ...

  8. 小程序云开发实现微信支付,不需要搭建服务器

    一.开发微信支付功能一定要架设服务器吗? 2019年的最后一天,舍得叔叔沉浸在探索的兴奋中,验证了微信小程序云开发也能优雅实现微信支付!小程序的目标是建立一个"serverless" ...

  9. mysql导入微信小程序云开发_微信小程序-云开发数据库上传json文件

    小程序新增了云开发功能,对于个人开发者是个利好消息.可以省去购买服务器,购买域名以及繁琐配置等步骤,减轻了开发者的负担.至于如何云开发我就不在这里赘述了,请移步微信小程序云开发官方文档,说的很清楚.这 ...

  10. 微信小程序云开发-树洞小程序Treehole(介绍)

    记录一款基于云开发的微信小程序. 树洞,顾名思义是作为匿名吐槽的平台,主要功能可以参照微信朋友圈的形式,不过采取的是匿名的方式. 主要基于微信小程序云开发,前端个人主页页面的界面使用的是ColorUi ...

最新文章

  1. Rook存储:Kubernetes中最优秀的存储
  2. int * const a, 和 const int* a,const PInt a;
  3. CF1101A Minimum Integer 模拟
  4. 一些著名的软件都用什么语言编写?
  5. ConTeXt 标题前后的空白
  6. 转:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
  7. 基于highcharts+easui+java生成时趋图
  8. argparse模块用法
  9. 测试员:你知道未来移动测试的方向是什么样的吗?
  10. LINUX内核编译选项-4
  11. 【CVPR2022】论文列表与下载——PartFour
  12. 爬虫项目开发与实践,附东方财富7x24小时实时信息代码
  13. java开发是it行业吗_转行IT行业为什么选择学习Java开发
  14. dell服务器新bois系统设置u盘启动,戴尔新版本的bios怎样设置U盘启动
  15. [Ec Final 2018] Misunderstood … Missing
  16. python写梦幻西游手游脚本辅助_深入解析Lua脚本加密技术,给游戏代码加上“紧箍咒”...
  17. python环境变量配置
  18. python中的./与../
  19. Firebird数据库的安装配置与使用
  20. TMF Open-API框架

热门文章

  1. 学习笔记 : 表达式目录树相关问题参照该demo expression拼接与拆解 expression转sql...
  2. 自定义头文件之二------hlib.h(慢慢更新)
  3. super()的作用
  4. 利用GDAL进行工具开源化改造
  5. hibernate.Session简介
  6. 图片少量显示 9张一下 类似微信,微博客户端
  7. 11-Container With Most Water
  8. Google的21道面试问题
  9. 拓端tecdat|Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型
  10. Python脚本实现深大校园网网页登陆