文档中心 > 淘宝购物小程序-开发指引

使用数据预取

更新时间:2022/12/08 访问次数:9709

数据预取能力支持在小部件容器启动过程中进行云函数、云应用的预请求,同一小部件配置上限为3个。

注:预取结果需为JSON格式。

IDE版本要求:IDE 2.3.9 及以上。


一、配置


26.png


IDE中widget目录下preload.json里配置如下内容。


{
  "type":"xxx",
  "params":{
    "name":"xxxx", // 云函数函数名
    "handler":"xxxx", // 云函数Handler
    "env":"test", // 云函数部署环境,开发者自定义
    "data":{ // 接口业务参数
      "key1":"value1",
      "key2":"value2"
    }
  }
}


1.云函数 ()


字段

类型

必须

含义

备注

id

String

否

预取唯一标识。

越短越好,建议1,2,3。

prefetchDepends

String

否

依赖的前一个预取配置id。

可以通过表达式获取前一个预取的返回数据。

type

String

是

预取类型。

TypeCloudFunction。

params

Object

是

预取参数。



name

String

是

云函数函数名。


handler

String

是

云函数Handler。


data

Object

否

接口业务参数(支持表达式)。


cacheType

String

否

缓存类型。


env

String

否

云函数部署环境,开发者自定义。

默认online。

validTime

String

否

缓存超时时间。

单位s 默认超时时间:24小时(即:86400s)。

scopeName

String

否

关联的scopeName。

本地未进行过scope授权,则不发请求。

reusable

String

否

标识此接口是否能被多次使用,多次使用的接口,缓存清除策略仅取决于开发者配置的有效期。

1)默认false,即不可以复用,本次使用后则移除缓存;

2)应用被杀后,缓存失效。


2.云应用 (mtop.miniapp.cloud.application.request)


字段

类型

必须

含义

备注

id

String

否

预取唯一标识。

越短越好,建议1,2,3。

prefetchDepends

String

否

依赖的前一个预取配置id。

可以通过表达式获取前一个预取的返回数据。

type

String

是

预取类型。

TypeCloudApplication。

params

Object

是

预取参数。



path

String

是

HTTP接口路径。


method

String

否

方法类型。

GET,POST,默认POST。

params

Object

否

URL参数(支持表达式)。


body

Obejct

否

放置在Body中的参数(支持表达式)。


headers

Obejct

否

HTTP请求头参数(支持表达式)。


cloudAppId

String

-

如果云服务关联了多个云应用,非默认云应用调用须指定。


cacheType

String

否

缓存类型。


env

String

否

云函数部署环境,开发者自定义。

默认online。

validTime

String

否

缓存超时时间。

单位s 默认超时时间:24小时(即:86400s)。

scopeName

String

否

关联的scopeName。

本地未进行过scope授权,则不发请求。

reusable

String

否

标识此接口是否能被多次使用,多次使用的接口,缓存清除策略仅取决于开发者配置的有效期。

1)默认false,即不可以复用,本次使用后则移除缓存;

2)应用被杀后,缓存会失效。


3.TOP调用 (mtop.miniapp.cloud.invoke.top)


字段

类型

必须

含义

备注

id

String

否

预取唯一标识

越短越好,建议1,2,3

prefetchDepends

String

否

依赖的前一个预取配置id

可以通过表达式获取前一个预取的返回数据

type

String

是

预取类型

TypeTOP

params

Object

是

预取参数



api

String

是

TOP API的名称


data

Object

否

接口业务参数

(支持表达式)


validTime

String

否

缓存超时时间

单位s 默认超时时间:24小时(即:86400s)

scopeName

String

否

关联的scopeName

本地未进行过scope授权,则不发请求

reusable

String

否

标识此接口是否能被多次使用,多次使用的接口,缓存清除策略仅取决于开发者配置的有效期。

  • 默认false,即不可以复用,本次使用后则移除缓存;
  • 应用被杀后,缓存失效


二、获取数据

1.接口:my.tb.getPrefetchData

2.入参


入参

类型

必须

含义

备注

type

String

是

预取数据类型

TypeCloudFunction

TypeCloudApplication

TypeTOP

TypeMTOP

params

Object

是

预取的参数



TypeCloudFunction

name

String

是

云函数函数名


handler

String

是

云函数Handler


env

String

否

云函数部署环境,开发者自定义


data

Object

否

接口业务参数



TypeCloudApplication

path

String

是

HTTP接口路径


method

String

否

方法

默认POST

params

Object

否

URL参数


body

Object

否

放置在Body中的参数


headers

Obejct

否

HTTP请求头参数


cloudAppId

String

-

如果云服务关联了多个云应用,非默认云应用调用须指定


env

String

否

云函数部署环境,开发者自定义


TypeTOP

api

String

是

TOP API的名称


data

Object

否

参数


timeout

String

否

API调用超时,单位ms, 默认30000ms



3.出参


预加载的数据结果:需要等待接口返回。


字段

类型

说明

success

boolean

是否成功

result

object

数据内容


4.示例


my.tb.getPrefetchData({
        type: "TypeCloudFunction",
        params: {
          name: "invokeTopApiBySdk",
          handler: "main",
          env: "test",
          data: {
            api: "taobao.time.get"
          }
        }, success: (res) => {
          my.alert({ content: "success - " + JSON.stringify(res) })
        },
        fail: (res) => {
          my.alert({ content: "fail - " + JSON.stringify(res) })
        }
      });


5.错误码


错误码

说明

2

无效的API入参。

101

获取的数据格式错误。

102

获取的数据不存在。

103

获取的数据已过期。

104

接口具体错误,若无兜底:接口请求失败。

105

获取数据超时。

106

表达式计算失败。


三、特殊场景

1.模板小部件


模板实例化的小部件支持数据预取配置在模板上,可以使用表达式构造参数进行预取接口的请求。


2.数量限制


预加载接口有数量限制,配置上限3个。


四、支持表达式


写法

含义

备注

@miniAppId

小部件id。


@miniAppKey

小部件appKey。


@url.key

url上的参数key的值。

闲时预取的时候没有URL;强依赖的话,影响预取效果;

@url.page.key

url上的page参数里key的值。

比如:https://market.m.taobao.com/app/miniapp-biz/qrcode/index.html?_ariver_appid=3000000002137055&page=pages/landing/landing?pageId=1438906
可以通过url.page.pageId取到 1438906。

@url.query.key

url上的query中,对应的Key的值。


@template.ext.key

小部件模板ext里的参数key的值。


@prefetch.id.xxx.yyy.key

id为请求的结果里面key。

比如:预取配置001 依赖 预取配置002的top接口返回结果;假设002请求的top接口返回数据
{
"time": "2020-11-06 11:38:20",
"request_id": "6ir76d9mxkoi"
}

则001的配置中可以通过以下配置传参
{
"time":@prefetch.002.time
}




FAQ

关于此文档暂时还没有FAQ
返回
顶部