文档章节

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

andot
 andot
发布于 2016/11/15 16:09
字数 1002
阅读 978
收藏 2
点赞 1
评论 4

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(三)

© 著作权归作者所有

共有 人打赏支持
andot

andot

粉丝 125
博文 8
码字总数 16729
作品 17
潍坊
程序员
加载中

评论(4)

andot
andot

引用来自“qianmenchuxue”的评论

good,分享之?可以吗?推广一下
可以可以,非常欢迎
qianmenchuxue
qianmenchuxue
good,分享之?可以吗?推广一下
andot
andot
谢谢~~
肖滔
肖滔
very good,我顶
异步通信组件hprose在微信小程序中的使用例子

网上搜索了在微信小程序中的使用,基本都是最老的版本 目前在新版中无法使用 现在写一个例子 第一步: 准备好一个hprose的服务端,什么语言的都行,我这里使用的是nodejs版本的 我进入开源的官方...

MrInsight ⋅ 05/28 ⋅ 0

如何在微信小程序中调用腾讯地图api

如果要搜索地图上的位置,比如附近的医院、学校等,就需要使用地图api,使用腾讯地图api的过程如下: 一、开发者申请腾讯地图 进入官网http://lbs.qq.com/key.html 申请密钥 验证完手机邮箱之...

临江仙卜算子 ⋅ 05/25 ⋅ 0

百度翻译google插件使用整理

百度翻译google插件使用整理 一、打开官网,下载插件 http://fanyi.baidu.com/static/webpage/ocrPluginPage.html 百度翻译网页版,http://fanyi.baidu.com/ 二、选择手动安装 三、浏览网页,...

tianma3798 ⋅ 05/29 ⋅ 0

如何通过二维码门禁实现微信开门

如何通过二维码门禁实现微信开门 如何通过二维码门禁实现微信开门是现下许多客户关心的问题,塞伯罗斯对此进行多番研究,如何让二维码门禁与微信二维码相互作用,微信小程序的诞生便是链接其...

塞伯罗斯 ⋅ 05/15 ⋅ 0

透笔度/wx-jq

wx-jq (一套完全原创的微信小程序插件集合库) 微信小程序插件,微信小程序组件,微信小程序插件集合,微信小程序组件集合,微信小程序插件学习,微信小程序插件开发, 查看效果截图: http...

透笔度 ⋅ 01/26 ⋅ 0

如何为你的服务器申请免费的SSL证书

一、前戏 在文章《利用微信小程序和Kubernetes打造简易私有云(一、开篇)》中,本人计划用微信小程序作为K8S私有云的前端。由于之前对微信小程序也不了解,就不得不走一遍流程来学习实践,才...

宅楠军 ⋅ 05/10 ⋅ 0

win10系统升级后远程连接 出现身份验证错误

一、出现问题原因,说明 昨天系统关机更新后,今天连接服务器出现 远程连接错误,“出现身份验证错误” 对应的win10 更新版本, 2018-适用于 Windows 10 Version 1709 的 05 累积更新,适合基...

tianma3798 ⋅ 05/11 ⋅ 0

微信小程序商店 | 即速商店_小程序流量平台

微信小程序商店 | 即速商店 即速应用商店-分类最齐全的微信小程序商店,收录当前最新最热门小程序,汇集各行业小程序案例及评测,在这里可以轻松找到各种实用好玩的小程序,也可 免费发布 自...

jisuapp ⋅ 02/08 ⋅ 0

"口令红包"-利用函数计算构建微信小程序的server端

前言 函数计算 阿里云函数计算是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的...

rsong ⋅ 02/06 ⋅ 0

编程微刊第四期文章汇总(2018.4)

编程微刊创立也有一段时间了,在此感谢一直关注我的小伙伴们,你们的关注和支持,是我每天不断更新的动力,我每个月会总结一期微刊,方便大家的阅读。 1. 推荐文章 这个时代,抛弃你的时候,...

祈澈姑娘 ⋅ 05/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从零开始搭建Risc-v Rocket环境---(1)

为了搭建Rocke环境,我买了一个2T的移动硬盘,安装的ubuntu-16.04 LTS版。没有java8,gcc是5.4.0 joe@joe-Inspiron-7460:~$ java -version程序 'java' 已包含在下列软件包中: * default-...

whoisliang ⋅ 5分钟前 ⋅ 0

大数据学习路线(自己制定的,从零开始学习大数据)

大数据已经火了很久了,一直想了解它学习它结果没时间,过年后终于有时间了,了解了一些资料,结合我自己的情况,初步整理了一个学习路线,有问题的希望大神指点。 学习路线 Linux(shell,高并...

董黎明 ⋅ 11分钟前 ⋅ 0

systemd编写服务

一、开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。 如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。 ...

勇敢的飞石 ⋅ 13分钟前 ⋅ 0

mysql 基本sql

CREATE TABLE `BBB_build_info` ( `community_id` varchar(50) NOT NULL COMMENT '小区ID', `layer` int(11) NOT NULL COMMENT '地址层数', `id` int(11) NOT NULL COMMENT '地址id', `full_......

zaolonglei ⋅ 22分钟前 ⋅ 0

安装chrome的vue插件

参看文档:https://www.cnblogs.com/yulingjia/p/7904138.html

xiaoge2016 ⋅ 24分钟前 ⋅ 0

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 47分钟前 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 52分钟前 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 今天 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 今天 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部