Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
122df0a8
U
uni-app
项目概览
DCloud
/
uni-app
4 个月 前同步成功
通知
731
Star
38707
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
122df0a8
编写于
4月 18, 2020
作者:
hbcui1984
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update cf-functions.md
上级
bc372bf7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
56 addition
and
34 deletion
+56
-34
docs/uniCloud/cf-functions.md
docs/uniCloud/cf-functions.md
+56
-34
未找到文件。
docs/uniCloud/cf-functions.md
浏览文件 @
122df0a8
##
#
简介
## 简介
云函数是运行在云端的
`JavaScript`
代码,和普通的
`Node.js`
开发一样,熟悉
`Node.js`
的开发者可以直接上手。
...
...
@@ -36,11 +36,11 @@ exports.main = async (event, context) => {
-
服务商为阿里云时,暂不可使用相对路径读取文件(比如
`fs.readFileSync('./info.txt')`
),可以使用绝对路径
`fs.readFileSync(path.resolve(__dirname,'./info.txt'))`
##
#
访问数据库
## 访问数据库
云函数中支持访问本服务空间下的数据库,调用方式详见
[
规范
](
uniCloud/cf-database.md
)
##
#
访问HTTP服务
## 访问HTTP服务
`uniCloud`
提供了
`uniCloud.httpclient`
供开发者使用。无需额外依赖,就可以请求任何 HTTP 和 HTTPS 协议的 Web 服务。
`uniCloud.httpclient`
返回的是一个
[
urllib实例
](
https://github.com/node-modules/urllib
)
。
...
...
@@ -165,7 +165,7 @@ exports.main = async function(event) {
```
-->
##
#
使用npm
## 使用npm
在云函数中我们可以引入第三方依赖来帮助我们更快的开发。云函数的运行环境是
`Node.js`
,因此我们可以使用
`npm`
安装第三方依赖。
...
...
@@ -174,7 +174,7 @@ exports.main = async function(event) {
Tips:
-
目前每个云函数上传包大小限制为10M。
##
#
客户端调用云函数
## 客户端调用云函数
前端代码(H5前端、App、小程序),不再执行uni.request联网,而是通过
`uniCloud.callFunction`
调用云函数,
`callFunction`
定义如下:
...
...
@@ -214,33 +214,6 @@ uniCloud.callFunction({
目前仅支持客户端调用云函数,即将支持云函数调用云函数。
### 注意事项
云函数是运行在云端的代码,运行环境由云服务器弹性调配,这是和传统
`Node.js`
应用很大的区别。
换言之,云函数每次执行的宿主环境(可简单理解为虚拟机或服务器硬件)可能相同,也可能不同,因此传统
`Node.js`
开发中将部分信息存储本地硬盘或内存的方案就不再适合,建议通过云数据库或云存储的方案替代。
另一方面,鉴于云函数的弹性调配机制,为提高运行性能,部分云厂商在一定时间周期内会复用相同的云函数实例,此时为避免数据污染,建议使用无状态的风格编写函数代码。
以如下代码为例,
`count`
作为全局变量,当多次调用该云函数时,可能会出现变量累加的情况(实例未复用时,每次返回0,若实例被复用,则可能返回1、2、3等各种意外情况)
```
javascript
let
count
=
0
;
module
.
exports
=
async
(
event
)
=>
{
return
count
++
//此示例为错误示例
//云函数实例未复用时,每次返回0
//若实例被复用,则可能返回1、2、3等各种意外情况
}
```
**Tips**
-
云函数中使用的时区是
`UTC+0`
,而不是
`UTC+8`
,在云函数中使用时间时需特别注意。
-
使用阿里云作为服务商时,暂时无法使用相对路径读取文件,如:
`fs.readFileSync('./info')`
,可以替换为
`fs.readFileSync(path.resolve(__dirname,'./info'))`
## 云函数中调用云函数@callbyfunction
用法同客户端调用云函数,不支持callback形式
...
...
@@ -270,7 +243,47 @@ let callFunctionResult = await uniCloud.callFunction({
})
```
### 注意事项
## 注意事项
### 云函数的启动模式(冷启动、热启动)
基于云函数按需执行的特点, 函数在不被触发的时候, 计算资源是不被激活的。
当一个云函数初次被触发时,其完整过程如下:
1.
实例化计算实例
2.
加载函数代码
3.
启动 node
4.
执行代码
函数被调用时,执行这些完整步骤的过程一般称作冷启动, 冷启动的耗时往往比较长.
而如果函数实例和执行进程都被复用的情况下一般被定义为热启动, 热启动的性能较冷启动要好很多.
如果一个云函数实例长时间没有被再次调用,则该计算实例会被销毁;将来再次调用该云函数时,就会再次触发云函数的冷启动。
因为存在冷热启动的差异,云函数中的全局变量就可能出现每次不一样的情况。
以如下代码为例,
`count`
作为全局变量,当多次调用该云函数时,可能会出现变量累加的情况(实例未复用时,每次返回0,若实例被复用,则可能返回1、2、3等各种意外情况)
```
javascript
let
count
=
0
;
module
.
exports
=
async
(
event
)
=>
{
return
count
++
//此示例为错误示例
//云函数实例未复用时,每次返回0
//若实例被复用,则可能返回1、2、3等各种意外情况
}
```
### 临时存储空间
云函数是运行在云端的代码,运行环境由云服务器弹性调配,这是和传统
`Node.js`
应用很大的区别。
换言之,云函数每次执行的宿主环境(可简单理解为虚拟机或服务器硬件)可能相同,也可能不同,因此传统
`Node.js`
开发中将部分信息存储本地硬盘或内存的方案就不再适合,建议通过云数据库或云存储的方案替代。
### 云函数中的异步行为
书写云函数时应注意
`async`
、
`await`
的使用,
`nodejs`
有内置模块
`util`
可以将符合
`error-first`
形式
`callback`
的函数转换为
`promise`
形式,
[
详情参考
](
https://nodejs.org/api/util.html#util_util_promisify_original
)
,比如以下示例:
...
...
@@ -296,4 +309,13 @@ exports.main = async function() {
return
val
}
```
\ No newline at end of file
```
### 其它
-
云函数中使用的时区是
`UTC+0`
,而不是
`UTC+8`
,在云函数中使用时间时需特别注意。
-
使用阿里云作为服务商时,暂时无法使用相对路径读取文件,如:
`fs.readFileSync('./info')`
,可以替换为
`fs.readFileSync(path.resolve(__dirname,'./info'))`
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录