Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
程序yang
unidocs-zh
提交
11fb671e
U
unidocs-zh
项目概览
程序yang
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
未验证
提交
11fb671e
编写于
7月 29, 2022
作者:
DCloud_JSON
提交者:
Gitee
7月 29, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update docs/uniCloud/cf-functions.md.
上级
02982653
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
88 addition
and
0 deletion
+88
-0
docs/uniCloud/cf-functions.md
docs/uniCloud/cf-functions.md
+88
-0
未找到文件。
docs/uniCloud/cf-functions.md
浏览文件 @
11fb671e
...
...
@@ -661,6 +661,94 @@ exports.main = async function() {
-
云端的云函数中使用的时区是
`UTC+0`
,而不是
`UTC+8`
,在云函数中使用时间时需特别注意。云函数在HBuilderX本地运行时,时区则是电脑的时区,很可能是
`UTC+8`
。建议使用时间戳,可以规避时区问题。
### 云函数递归调用@recurrenceCf
当一个云函数实例资源不能满足需求,或超时时间不够用时。比如你要给10万个用户发送的短信,而短信发送api一次只接受50个用户,那一共需要调用2000次接口。而这2000次调用不能在一个云函数中完成。这种场景就可以使用云函数递归调用,来分解任务。
示例代码如下:
```
// 当前云函数名称 send-sms-cf
'use strict'
;
const
db
=
uniCloud
.
database
();
const
dbCmd
=
db
.
command
const
userTable
=
db
.
collection
(
'uni-id-users'
)
exports
.
main
=
async
(
event
,
context
)
=>
{
//执行业务逻辑
let
res
=
await
sendSms
(
event
.
before_id
)
if
(
res
.
errCode
)
{
return
res
}
else
{
// 如果没有报错,就让当前云函数 调用当前云函数(云对象同理)。注意:这里是异步的
uniCloud
.
callFunction
({
name
:
'send-sms-cf'
,
data
:
{
before_id
:
res
.
before_id
}
})
.
catch
(
e
=>
{
console
.
log
(
e
.
message
);
})
.
then
(
e
=>
{
console
.
log
(
e
.
result
);
})
// 等待500毫秒给下一个请求发出去的时间
return
await
new
Promise
((
resolve
,
reject
)
=>
{
setTimeout
(()
=>
{
resolve
(
res
)
},
500
)
})
}
async
function
sendSms
(
before_id
)
{
console
.
log
(
'before_id'
,
before_id
);
let
where
=
{
phone
:
dbCmd
.
exists
(
true
),
//..这里可以写你自己的其他条件,如超过多久没登录的用户 last_login_date < Date.now() - 3600*24*...
}
if
(
before_id
){
//高性能分页查询,以上一次查询的最后一条数据的id被起始id
where
.
_id
=
dbCmd
.
gt
(
before_id
)
}
let
res
=
await
userTable
.
where
(
where
)
.
limit
(
50
)
.
orderBy
(
"_id"
,
"asc"
)
.
get
()
if
(
!
res
.
data
.
length
)
{
return
{
errCode
:
'sendSms-invalid'
,
errMsg
:
'结束,没有符合条件的接收者'
}
}
let
phoneList
=
res
.
data
.
map
(
item
=>
item
.
phone
)
res
=
await
uniCloud
.
sendSms
({
phoneList
,
appid
:
'__UNI__xxxxxxx'
,
smsKey
:
'****************'
,
smsSecret
:
'****************'
,
templateId
:
'100**'
,
// 请替换为自己申请的模板id
data
:
{
text1
:
'xxx'
,
text2
:
'xxx'
}
})
if
(
res
.
errCode
)
{
return
res
}
return
{
errCode
:
0
,
before_id
:
res
.
data
[
res
.
data
.
length
-
1
]
.
_id
}
}
};
```
注意:如果不小心把递归云函数写成死循环,就把云函数的内容全部删除,重新上传覆盖即可
## 云函数配置
云函数除了代码,还有配置。在uniCloud web控制台可以配置;在HBuilderX项目中,云函数根目录的
`package.json`
也是存放配置的地方。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录