向云函数请求数据uniapp提供了两种方法:
视频中用的是promise方式
// promise方式
uniCloud.callFunction({
name: 'hellocf',
data: { a: 1 }
})
.then(res => {});
// callback方式
uniCloud.callFunction({
name: 'hellocf',
data: { a: 1 },
success(){},
fail(){},
complete(){}
});
客户端向服务端传参
第二节调用云函数时属性只写了一个name,还有一个data,这个data就是用来向服务端传递参数的
then()方法是异步执行,then前面的代码执行完了才能执行then内部的代码,用于避免没有获取到数据后面的方法就拿不到值而导致的报错,需要通过网络请求拿值的方法就带一个then来避免报错
在前端写一个方法连接云函数后,传一个值到云函数,需要云函数接收这个值 index.vue
onLoad() {
uniCloud.callFunction({
// name是自定义的云函数名,data是传的参数
name:"myCloudFun",
data:{
name:"王五",
age:"20"
}
}).then(res=>{
console.log(res);
})
},
云函数 index.js
// 'use strict';
exports.main = async (event, context) => {
//event为客户端上传的参数
// console.log('event : ', event)
//返回数据给客户端
return event
};
代码逻辑是:
前端传递一个json对象
data到云函数,云函数通过event接收之后。通过return将接收到的值返回到前端,前端又通过then打印接收到的值到控制台
还可以在云函数里这样写的更清晰一些: 通过解构赋值把值拿出来,用模板字符串语法返回到前端
// 'use strict';
exports.main = async (event, context) => {
// 接收前端传递的参数,并解构赋值给两个自定义变量,然后返回这两个变量
let {name, age} = event
//返回数据给客户端
return `我的名字是${name},我的年龄是${age}`;
};
前端获取到值之后,打印出来的结果
模拟返回一个数组包含的一堆json字符串,这堆数据就是网络接口请求到的数据,以后模拟查询数据库获取到的数据就是基本这样的
// 'use strict';
exports.main = async (event, context) => {
let arr = [{
"id": "28ee4e3e6050598b0af006d25246ec3f",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/a95e5617-49b9-4613-aa8c-a8e529a28ba6.jpg",
"price": "5208/饼",
"title": "六妙紫印"
},
{
"id": "28ee4e3e6050b76c0b014bdb0431265a",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/eb9ffa17-b85c-4a95-a01a-454b7396bf91.jpg",
"price": "3120/箱",
"pronum": "LM-2020018",
"title": "老树贡眉"
},
{
"id": "79550af26050b9d00a6375ad20319360",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/7cbba642-5338-4a34-9f67-9e83ad122005.jpg",
"price": "936/盒",
"pronum": "LM-201810",
"title": "贡眉散茶"
},
{
"id": "28ee4e3e60507a2f0af735f57087eaa5",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/5d094288-2503-48c1-b145-e6270bccc774.jpg",
"price": "1949/饼",
"pronum": "LM-201868",
"title": "改革开放四十周年纪念茶"
},
{
"id": "79550af260ab47ef19ae99816311552f",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/611f7546-7663-4d57-a131-df6be5932d68.jpg",
"price": "23610/箱",
"pronum": "LM-2021010",
"title": "白毫银针"
},
{
"id": "79550af260507cec0a59d68c0fdb5323",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/b9b62c3a-f8e4-47f6-9260-9a24128890ca.jpg",
"price": "1799/罐",
"pronum": "LM-2020011",
"title": "老茶牡丹(2006年)"
},
{
"id": "28ee4e3e6050b4320b00e94b00e1fb56",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/96047f75-6840-4594-8d1d-773965487e9a.jpg",
"price": "1466/饼",
"pronum": "LM-2019033",
"title": "有机寿眉"
},
{
"id": "b00064a76050b3cd0a550ad50b996430",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/996656b3-556e-4cbc-9f37-55429032464c.jpg",
"price": "328/袋",
"pronum": "J-LM201728",
"title": "寒露茶"
}
]
return arr;
};
现在就拿到8条数据了
在页面中渲染这些数据出来,将获取到的值赋值到data中自定义的变量listArr,这样,标签模板中就能通过data拿到值了,然后在标签模板中将数据遍历出来,遍历要写id
<template>
<view class="home">
<view class="row" v-for="item in listArr" :key="item.id">
<image :src="item.picurl" mode=""></image>
<view class="">{{item.title}}</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
listArr:[]
}
},
onLoad() {
uniCloud.callFunction({
// name是自定义的云函数名,data是传的参数
name:"myCloudFun",
data:{
name:"王五",
age:"20"
}
}).then(res=>{
this.listArr = res.result;
console.log(this.listArr);
})
},
methods: {
}
}
</script>
<style lang="scss">
.row {
border-bottom: 1px solid #ccc;
padding: 30rpx;
}
</style>
现在就已经把数据渲染到页面了一共8条数据
传参: 写一个小功能,在云函数请求中写一个数,然后后台根据这个数决定返回多少条数据,在云函数中,要先通过解构赋值,从event中把传递的参数num解构出来,然后接下来对数组进行裁剪,数组就是接口返回的数据条数,裁剪的值就是传过来的参数
前端代码index.vue
<template>
<view class="home">
<view class="row" v-for="item in listArr" :key="item.id">
<image :src="item.picurl" mode=""></image>
<view class="">{{item.title}}</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
listArr:[]
}
},
onLoad() {
uniCloud.callFunction({
// name是自定义的云函数名,data是传的参数
name:"myCloudFun",
data:{
num:3
}
}).then(res=>{
this.listArr = res.result;
console.log(this.listArr);
})
},
methods: {
}
}
</script>
<style lang="scss">
.row {
border-bottom: 1px solid #ccc;
padding: 30rpx;
}
</style>
云函数代码:
// 'use strict';
exports.main = async (event, context) => {
let {num} = event
let arr = [{
"id": "28ee4e3e6050598b0af006d25246ec3f",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/a95e5617-49b9-4613-aa8c-a8e529a28ba6.jpg",
"price": "5208/饼",
"title": "六妙紫印"
},
{
"id": "28ee4e3e6050b76c0b014bdb0431265a",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/eb9ffa17-b85c-4a95-a01a-454b7396bf91.jpg",
"price": "3120/箱",
"pronum": "LM-2020018",
"title": "老树贡眉"
},
{
"id": "79550af26050b9d00a6375ad20319360",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/7cbba642-5338-4a34-9f67-9e83ad122005.jpg",
"price": "936/盒",
"pronum": "LM-201810",
"title": "贡眉散茶"
},
{
"id": "28ee4e3e60507a2f0af735f57087eaa5",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/5d094288-2503-48c1-b145-e6270bccc774.jpg",
"price": "1949/饼",
"pronum": "LM-201868",
"title": "改革开放四十周年纪念茶"
},
{
"id": "79550af260ab47ef19ae99816311552f",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/611f7546-7663-4d57-a131-df6be5932d68.jpg",
"price": "23610/箱",
"pronum": "LM-2021010",
"title": "白毫银针"
},
{
"id": "79550af260507cec0a59d68c0fdb5323",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/b9b62c3a-f8e4-47f6-9260-9a24128890ca.jpg",
"price": "1799/罐",
"pronum": "LM-2020011",
"title": "老茶牡丹(2006年)"
},
{
"id": "28ee4e3e6050b4320b00e94b00e1fb56",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/96047f75-6840-4594-8d1d-773965487e9a.jpg",
"price": "1466/饼",
"pronum": "LM-2019033",
"title": "有机寿眉"
},
{
"id": "b00064a76050b3cd0a550ad50b996430",
"picurl": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-8c036f36-4afa-43c7-9a76-ffc7e5723056/996656b3-556e-4cbc-9f37-55429032464c.jpg",
"price": "328/袋",
"pronum": "J-LM201728",
"title": "寒露茶"
}
]
arr = arr.slice(0,num)
return arr;
};
这样传的3表示请求三条数据,请求的三条数据就渲染到页面中了,要请求几条数据直接改前端的传值就可以了