文档章节

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

andot
 andot
发布于 2016/11/20 23:57
字数 661
阅读 858
收藏 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

粉丝 129
博文 8
码字总数 16729
作品 17
潍坊
程序员
私信 提问
小程序 大假期,技术猿国庆假期的正确打开方式…

明天(10月1日)就是国庆黄金7天假了。作为技术猿,除了美美的睡一觉好像也没啥别的事了。与其窝在家里玩手机刷朋友圈,不如做个小程序玩玩。 微信小程序开发正当时,没有内测资格不要紧。这...

凝小紫
2016/09/30
5.7K
11
Hprose for JavaScript/HTML5 支持微信小程序啦

Hprose 2.0 for JavaScript/HTML5 从发布之后,就一直紧随潮流,不但对电脑、手机、平板上的各种浏览器都提供了良好的支持以外,而且对各种 Hybird app 都提供了良好支持(包括但不限于 ioni...

andot
2016/09/28
2.8K
5
异步通信组件hprose在微信小程序中的使用例子

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

MrInsight
2018/05/28
0
0
百度翻译google插件使用整理

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

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

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

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

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 我家猫真会后空翻

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听这个# 我艇牛逼,百听不厌,太好听辣 分享 Led Zeppelin 的歌曲《Stairway To Heaven》 《Stairway To Heaven》- Led Z...

小小编辑
27分钟前
1
0
node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 安装electron-rebuild cnpm ins......

Chason-洪
今天
3
0
eclipse中项目svn转gitLab全过程

在工作中,我们可能会遇到项目从svn迁移到gitLab;此过程我们需要变化版本管理工具,上传代码。本篇博客记录了使用spring tool suit(sts/eclipse)进行项目迁移的全过程。 步骤: (1)端口之...

em_aaron
今天
3
0
scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
今天
3
0
通俗易懂解释网络工程中的技术,如STP,HSRP等

导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面...

问题终结者
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部