mp_pollUntil
Poll page data or evaluate a predicate repeatedly until a condition is met, then optionally run an action and capture before/after snapshots of specified data paths.
Instructions
通用 wait-for-condition / waitData 工具:轮询执行 predicate(返回任意真值即命中)直到命中或超时,可选在命中后执行 action,并按 snapshotPaths 拍 before/after 快照。典型场景:等 page.data 某字段变化(predicate 写 function(){ return getCurrentPages().pop().data.conversationHistory.length === 1 })、等异步状态切换、等 SSE 流式中段、时序敏感打断。
predicate / action 是 function 源码字符串,跑在 AppService(可用 getCurrentPages、wx 等);predicateArgs / actionArgs 是按顺序展开给这两个函数的入参数组。轮询由 server 端管理,重连不留脏 setInterval。
predicate 与 dataPath 二选一:若该环境 evaluate 注入通道不可用(对任意函数都报 'is not a function'),改用 dataPath 直接轮询 page.data 的某条路径(SDK 端单路径投影,不走 evaluate)——dataEquals 省略时按真值命中、给了则与该值 deep-equal 命中(可精确等 false/0/null)。注意:命中后的 action 仍走 evaluate,evaluate 不可用时只用 dataPath+snapshotPaths(snapshot 读 page.data、不依赖 evaluate)。
snapshotPaths 走点路径取值,支持 [N] 下标、负索引、[*] 通配(如 conversationHistory[*].aiStatus、list.length);before = predicate 命中时刻的 page.data,after = action 跑完且等 snapshotAfterMs 后的 page.data(snapshotAfterMs 给异步 setData 留时间,默认 0,上限 60000,仅在传 snapshotPaths 时有效)。结果超过 maxBytes(默认 50000B)会截断。
注意:timeoutMs(默认 15s,上限 600s)是 predicate、action、等待和快照的整体预算;若比单次 evaluate 还短,可能只跑 1 次 predicate 就超时。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | ||
| dataPath | No | ||
| maxBytes | No | ||
| predicate | No | ||
| timeoutMs | No | ||
| actionArgs | No | ||
| connection | No | 可选连接覆盖(不传则用默认会话)。可用字段:mode(launch|connect)、cliPath、projectPath、wsEndpoint、timeout、port(【自动化端口】→ cli auto --auto-port,默认 9420;不是 IDE HTTP 服务端口,别把 IDE 服务端口传进来)、account、ticket、trustProject、args、cwd、autoClose、autoLaunch、launchTimeout、connectTimeout。 | |
| dataEquals | No | ||
| predicateArgs | No | ||
| snapshotPaths | No | ||
| pollIntervalMs | No | ||
| snapshotAfterMs | No |