云函数:
exports.main = async (event, context) => new Promise((resolve, reject) => { db.collection( 'cardList' ).add({ data: { name : 'name' }, success: function () { resolve({status : 1}) } }); }) |
小程序:
wx.cloud.callFunction({ name: 'addCard' , data: { name : 'name' }, complete: res => { console.log( 'callFunction test result: ' , res) }, success : res => { console.log(res) } }) |
小程序中打印出来的是:
{errMsg: "cloud.callFunction:ok", result: null, requestID: "e474bbe7-10e1-11e9-9884-525400192d0e"}
请问result为何返回的是 {status : 1}
但是官网的例子是可以输出的值
exports.main = (event, context) => new Promise((resolve, reject) => { setTimeout(() => { resolve(3333) }, 3000) }) |
{errMsg: "cloud.callFunction:ok", result: 3333, requestID: "e474bbe7-10e1-11e9-9884-525400192d0e"}
// 云函数入口函数 exports.main = async (event, context) => { const wxContext = cloud.getWXContext() const db = cloud.database() const _ = db.command const $ = db.command.aggregate /** * customers表和record表作连接 * @see https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/async.html * 需要异步返回数据,否则返回的数据为null */ console.log('调用云函数查询设备信息(ID列表):' + event.deviceId) return new Promise((resolve , reject) => { db.collection('customers') .aggregate() .match({ _id:_.in(event.deviceId) }) .lookup({ from:'record', let:{ customersId:'$_id' }, pipeline:$.pipeline() .match(_.expr($.eq(['$uid','$$customersId']))) .sort({ record_time:-1 }) .limit(12) .done(), as: 'recordList' }) .end() .then(res => { console.log("返回结果列表:") console.log(res.list) // 通过resolve()返回结果 resolve(res) }) .catch(err => reject(err)) }) } //调用端 wx.cloud.callFunction({ name:'getDeviceInfo', data:{ 'deviceId':deviceId }, success:function(res){ wx.showToast({ title: '更新成功', icon:'success', }) console.log(res) }, faile:function(res){ } })
@see https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/async.html
云函数处理数据库并根据处理结果返回前端:
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
try
{
let res = await db.collection(
'tb_user'
).add({
data: {
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID
}
})
var
code = 0
var
msg =
'success'
if
(res.errMsg !=
'collection.add:ok'
) {
code = 1
msg =
'error'
}
return
{
code: code,
msg: msg,
data: {
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
env: wxContext.ENV
}
}
}
catch
(e) {
console.error(
'err:'
,e)
return
{
code: e.errCode,
msg:
'error'
}
}
}
这样
exports.main = async (event, context) => {
return await db.collection('cardList').add({
data: {
name: 'name',
}
})
}
马上学习了一下 Promise
https://segmentfault.com/a/1190000007032448
Promise接受一个「函数」作为参数,该函数的两个参数分别是resolve和reject。
这两个函数就是就是「回调函数」,由JavaScript引擎提供。
resolve函数的作用:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去; reject函数的作用:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
resolve传递出去的结果,外部函数并没有 接收到吧?
不知道我加个 return 对不对
exports.main = async (event, context) => return new Promise((resolve, reject) => {})
哥你这写法就有问题
哎呀!露怯了!
本来以为我的锅!
赶紧测试一下。
然后,我要跟你杠精一下。
exports.main = async (event, context) => {
return
new
Promise((resolve, reject) => {})
}
这段代码,绝对没语法错误。
你的 async(event,context) = > 这个后面少个 { } 中括号
你不写 return ,肯定是null
也不知道你是测试我的代码后错误,就来杠我,
还是测都没测就来杠我!
哥你本来回复我的代码里就 是 async(event,context) = > 这个后面少个 { } 中括号
我是直接从你帖子里复制的。
你是要杠嘛?
也不说说后来如何?
算了,不值得!交流!