文档章节

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

andot
 andot
发布于 2016/11/20 23:57
字数 661
阅读 823
收藏 2

Hprose 技术交流群:48855729

书接上回,上一回中我们讲到 Hprose 提供的协程可以让 Hprose 的异步调用同步化。但是在最后的例子中,有一个小的细节,不知道你有没有注意到,就是程序的最后,我们使用了这样的代码:

    this.setData({
      userInfo: yield app.getUserInfo
    });

将原本复杂的通过异步调用来设置 setData 的过程同步化了。这是因为 hprose 提供了的协程,可以 yield 单参数回调方法的函数,并将回调方法的参数作为该 yield 调用的返回值。从而避免了 thatthis 之间的转换,也避免了写回调函数。

但是 hprose 的所提供对协程的支持不止于此,hprose 还将 wx 的所有 API 都封装到了 hprose.wx 下面,将需要使用回调方式的 API 封装成了返回 promise 对象的 API,通过这种封装,所有这些 API,就都可以使用 co/yield 方式同步调用了。

例如微信官方例子中,上传文件的例子是这样的:

wx.chooseImage({
  success: function(res) {
    var tempFilePaths = res.tempFilePaths
    wx.uploadFile({
      url: 'http://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址
      filePath: tempFilePaths[0],
      name: 'file',
      formData:{
        'user': 'test'
      },
      success: function(res){
        var data = res.data
        //do something
      }
    })
  }
})

现在换成 hprose 所提供的 API,就可以变成这样:

var hprose = require('../../utils/hprose.js');
var wx = hprose.wx;
var co = hprose.co;

co(function*() {
  var tempFilePaths = (yield wx.chooseImage()).tempFilePaths;
  var data = (yield wx.uploadFile({
    url: 'http://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址
    filePath: tempFilePaths[0],
    name: 'file',
    formData:{
      'user': 'test'
    }
  })).data;
  //do something
})

除去引入 hprose 的代码以外,你会发现 co 程序段中的代码,已经完全变成了同步调用的写法,避免了回调,让程序变得更加简单直观和清晰了。

再比如操作文件的例子:

wx.startRecord({
  success: function(res) {
    var tempFilePath = res.tempFilePath
    wx.saveFile({
      tempFilePath: tempFilePath,
      success: function(res) {
        var savedFilePath = res.savedFilePath
      }
    })
  }
})

转化成同步代码是这样的:

var res = yield wx.startRecord();
var tempFilePath = res.tempFilePath;
res = yield wx.saveFile({ tempFilePath: tempFilePath });
var saveFilePath = res.savedFilePath;

没有回调,没有嵌套。整个程序就这么清爽!

好了,我就不多举例了,剩下的,我想你已经知道该怎么做了。

© 著作权归作者所有

共有 人打赏支持
andot

andot

粉丝 126
博文 8
码字总数 16729
作品 17
潍坊
程序员
私信 提问
异步通信组件hprose在微信小程序中的使用例子

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

MrInsight
05/28
0
0
微信小程序开发系列七:微信小程序的页面跳转

微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发...

JerryWang_SAP
10/22
0
0
百度翻译google插件使用整理

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

tianma3798
05/29
0
0
如何在微信小程序中调用腾讯地图api

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

临江仙卜算子
05/25
0
0
微信小程序开发系列四:微信小程序之控制器的初始化逻辑

微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 这个教程的前两...

JerryWang_SAP
10/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里云发布Quick BIV3.0,人人都能轻松进行在线数据分析

摘要: 提到BI与OLAP这两个概念,对于很多做数据库的技术人员来说并不陌生。BI随着时代的发展逐渐出现了新型BI和传统型BI的划分,从目前的发展程度来看,传统型BI正在慢慢地衰退,由于传统型...

阿里云官方博客
6分钟前
0
0
必知必会JVM垃圾回收——对象搜索算法与回收算法

垃圾回收(GC)是JVM的一大杀器,它使程序员可以更高效地专注于程序的开发设计,而不用过多地考虑对象的创建销毁等操作。但是这并不是说程序员不需要了解GC。GC只是Java编程中一项自动化工具...

公众号_Zack说码
10分钟前
0
0
学jQuery:这些就够了!

废话不多说,进入正题 下面就是有关jQuery的语法和基础操作。 ###jQuery语法基础 一、使用JQuery必须先导入jquery.x.x.x.js文件。   <script src="js/jquery.js"></script>   二、JQuer...

前端攻城老湿
16分钟前
0
0
服务器被加了挖矿代码

平时很少使用的一台服务器,24G内存,在上面搭建了Hadoop环境。 突然发现负载好高,top看了一下,一个java进程占用了很多cpu 疑似国内来源的“8220挖矿团伙”追踪溯源分析 挖矿木马 sustes 追...

mickelfeng
17分钟前
0
0
Java每天10道面试题,跟我走,offer有!(三)

Java每天10道面试题,跟我走,offer有!(三) 21.final, finally, finalize的区别   1、final修饰符(关键字)。 被final修饰的类, 就意味着不能再派生出新的子类, 不能作为父类而被子类...

Java干货分享
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部