Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
11fb671e
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3172
Star
105
Fork
804
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
93
列表
看板
标记
里程碑
合并请求
67
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
93
Issue
93
列表
看板
标记
里程碑
合并请求
67
合并请求
67
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录