如何在微信小程序中使用 Hprose(二)

本贴最后更新于 3077 天前,其中的信息可能已经时移世异

Hprose 技术交流群:48855729

如何在微信小程序中使用 Hprose

书接上文。

这次仍然是下载 hprose-wx,或者从开源中国的 Git 服务器镜像下载。

这次我们发现 dist 目录下多了一个文件:

  • regenerator-runtime.js

现在我们把它也下载下来,放在上一篇文章里说的那个微信小程序的 utils 目录下。

接下来,打开 pages/index/index.js 文件。

在开头加上:

var hprose = require('../../utils/hprose.js'); var co = hprose.co; var regeneratorRuntime = require("../../utils/regenerator-runtime.js");

第一句是引入 hprose。

第二句引入的 co 是 hprose 中实现的协程,后面我们重点讲的就是它。

第三句引入了一个 regeneratorRuntime,这个又是干啥的呢?因为微信小程序的执行环境是 ES5 的,但是协程本身是 ES6 中才有的实现,所以呢,想直接用,是没有的。

但是呢,微信小程序开发环境提供了一个开启 ES6 转 ES5 的选项:

开启 ES6 转 ES5

打开这个选项呢,ES6 的协程代码就自动转换成 ES5 的代码了,但是转换之后的代码其实是需要引用一个库的,这个库就是 regeneratorRuntime 这个东西。如果你不加入 regeneratorRuntime 这个库,那么就会看到 regeneratorRuntime 未定义的错误。

上面解释了这么多,如果听不懂也没关系,你就只要知道要用协程,就把上面三句话写上就可以了。

下面我们来看看使用协程的代码怎么来写:

之前我们实现 hprose 远程调用,是在 onLoad 事件中加入了以下代码:

var client = hprose.Client.create("http://www.hprose.com/example/", ["hello"]); client.hello("world", function(result) { console.log(result); });

这段代码很异步,那我们把它 Promise 化一下吧。

var client = hprose.Client.create("http://www.hprose.com/example/", ["hello"]); client.hello("world").then(function(result) { console.log(result); });

现在这段代码很 Promise 了,但是你可能觉得好像更复杂了。是这样吗?

确实是的,但是 Promise 化之后,有两个好处,一是 hello 方法的结果是一个 Promise 对象,你可以传递这个对象到其它地方了,而不需要把回调方法传过来了。第二个好处嘛,就是可以跟协程结合了。让我们来看看怎么跟协程结合。

co(function*() { var client = hprose.Client.create("http://www.hprose.com/example/", ["hello"]); var result = yield client.hello("world"); console.log(result); });

现在的代码,看上去很同步了吧。hello 的返回结果经过 yield 之后,就直接可以获取到值了。

co 除了可以将一个生成器作为协程执行以外,它还提供了一个 co.wrap 方法,这个方法可以将生成器包装成一个普通函数。所以,下面要放大招了:

//index.js var hprose = require('../../utils/hprose.js'); var co = hprose.co; var regeneratorRuntime = require("../../utils/regenerator-runtime.js"); //获取应用实例 var app = getApp() Page({ data: { motto: 'Hello World', userInfo: {} }, //事件处理函数 bindViewTap: function() { wx.navigateTo({ url: '../logs/logs' }) }, onLoad: co.wrap(function *() { console.log('onLoad') var client = hprose.Client.create("http://hprose.com/example/", ["hello"]); var result = yield client.hello("world"); console.log(result); //调用应用实例的方法获取全局数据 this.setData({ userInfo: yield app.getUserInfo }); }) })

上一篇文章中的使用异步回调来完成调用的代码,现在就变成看上去很同步的使用协程方式的代码了。

当然关于 hprose 中的协程不仅仅如此,它比 tj 所实现的 co 协程要完美的多,也比 ES2016 所提供的 async/await 更加强劲,如果想要了解更多,可以阅读这篇 hprose 协程

最后再强调一点:如果你用的是微信小程序的正式开发账号,那么连接的服务器地址应该是 https 的而不能是 http 的,而且应该在开发账号里设置要连接的服务器地址。

如何在微信小程序中使用 Hprose(三)

  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 630 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
andot
野生程序员,20年+编程经验,近十年来,全身心专注于 Hprose 开源项目的开发和维护。 潍坊

推荐标签 标签

  • Outlook
    1 引用 • 5 回帖
  • OpenCV
    15 引用 • 36 回帖
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    335 引用 • 324 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    367 引用 • 1844 回帖 • 2 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 29 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 3 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 814 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 294 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖 • 2 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 76 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 440 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 368 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 553 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 2 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    173 引用 • 518 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    184 引用 • 1015 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    151 引用 • 988 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 647 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 316 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖 • 1 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    180 引用 • 408 回帖 • 489 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖 • 1 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖 • 1 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    22 引用 • 214 回帖 • 1 关注