LeanCloud TypeScript SDK

一个面向 Angular2 以及 ionic2 开发者的 SDK

无法统计到具体有多少开发者会使用 Angular2 或者 ionic2 作为开发框架去进行实际的开发,诸如我个人使用的过程中被 zone.js 坑了不止一次:Angular2 View Not Changing After Data Is Updated,在 Promise 中经常遇到 angular2 不刷新页面的情况,我也局限于自己的前端能力,一怒之下我粗略地研究了下 angular2 的文档,发现它通篇都是在选择 RxJS 作为自己的异步解决方案,加上 LeanCloud 官方的 JS SDK 也不可能快速的切换到并不是所有 js 和 node 工程师都能接受的 rx 模式下,因此我花了 3 个月的时间,使用 TypeScript 重写了一遍 sdk,并且重命名了一些原来的 sdk 对于用户来说容易混淆的几个接口,这个 sdk 地址如下:LeanCloud TypeScript SDK

安装

npm install leancloud-typescript-rx-sdk --save

API Doc

LeanCloud TypeScript SDK API Doc

示例

存储一个对象:

    let todo: RxAVObject = new RxAVObject('RxTodo');
    todo.set('title', '开会');
    todo.set('time', '2016-12-03');
    todo.set('reminder', new Date());
    todo.save().subscribe(success => {
        if (success) console.log(todo.objectId);
    });

适用环境和框架

正如标题所言,推荐在 Angular2 和 ionic2 下使用。

ionic2 适配

熟悉 LeanCloud SDK 的同学都应该对本地缓存 AVUser.current() 不陌生,因此我在设计 ts sdk 的时候,特地重写了这部分逻辑,我将本地缓存的接口暴露出来了,换言之,你可以让 ts sdk 将 AVUser.current() 存储在任何你可控的本地缓存里面,比如 ionic2 里面常用的本地缓存是:

import { Storage } from '@ionic/storage';

在 ts sdk 中定义了一个接口:

export interface IStorage {
    add(key: string, value: any): Promise<any>;
    remove(key: string): Promise<boolean>;
    get(key: string): Promise<string>;
}

而开发者只要编写如下代码,实现这个接口并且在初始化 SDK 的传入即可:

import 'rxjs/add/operator/map';
import { IStorage } from 'leancloud-typescript-rx-sdk';
import { Storage } from '@ionic/storage';

export class IonicStorageProvider implements IStorage {
  public storage: Storage;
  constructor() {
    this.storage = new Storage();
  }
  add(key: string, value: any): Promise<any> {
    return this.storage.set(key, value);
  }
  remove(key: string): Promise<boolean> {
    return this.storage.remove(key);
  }
  get(key: string): Promise<string> {
    return this.storage.get(key);
  }
}

初始化代码如下:

RxAVClient.init({
  appId: 'your app id',
  appKey: 'your app key',
  plugins: {
    storage: new IonicStorageProvider()// 指定本地缓存的插件
  }
});

与官方 JS SDK 最大的区别可能就是要从 Promise 切换到 RxJS

关于这一点,我在 ts sdk 的 readme 上也做了解释:

为什么异步模型选择了 RxJavaScript 而不是亲儿子 Promise?- Why RxJS?

因为 RxJS 可以很好解决异步和事件组合的问题。大多数 BaaS 或者 PaaS 的使用者都是倾向于服务端是一个所见即所用的东西(正如 LeanCloud 这些年以来一直致力于实现的目标一样),
因此大多数用户都是客户端编程经验丰富,而经验丰富的客户端工程师对于异步和事件都不会陌生,而在 Rx 的编程理念中,致力于在这两者事件找到一种结合:

异步: await Task = Observable.subscribe
事件: event.onEmit = Observable.subscribe

也就是不管是主动和被动的行为都视为我作为一个客户端订阅了这两种行为的结果,这就是两者的共同点。

对于习惯了 Rx 的开发模之后,对客户端工程师来说很容易「深陷其中」。

最后

希望更广泛的用户能够使用更高效率的开发框架来减少开发的周期,这一点就是 LeanCloud 能够继续为大家服务的理由。

既然是新的为啥还要用 AV ...

因为 AV 比较好看。

1 人赞了这个帖子.

请问这个文档链接无效了, 这个 API 还能用吗? 我是一个unity前端开发,刚开始开发后端, rx正是我在找的东西, 请问目前这个API是什么状态?

哦,有点明白了,云引擎上有https://github.com/RxLeanCloud/rx-lean-js-core-node-sample 的例子, unity上,我可以自己用unirx 封装 leancloud的sdk

一次性的异步 await promise 可以消除 callback,让代码书写、阅读回归 线性
持续性的异步才是 Observable 的用武之地,但也可以用 ES 2018 的 异步生成器来消除 callback,回归线性 —— https://web-cell.dev/iterable-observer/