问题描述
用云函数获取云数据库中的值时,想只取得某一列的值返回,代码写成如下所示
let accessToken = db.collection('wxConfig').where({
name: "AccessToken"
}).get();
accessToken = accessToken.data[0].value
return accessToken;
发现报错,返回
{“errorCode”:1,“errorMessage”:“user code exception caught”,“stackTrace”:“Cannot read property ‘0’ of undefined”}
上述代码的accessToken.data
是undefined
?!
但是,将代码accessToken.data[0].value
改成accessToken.data
却可以正常返回
let accessToken = db.collection('wxConfig').where({
name: "AccessToken"
}).get();
accessToken = accessToken.data
return accessToken;
百思不得其姐
后查资料发现数据库.get()
方法并不是直接返回数据,而是返回一个Promise
,如果在云函数结束后直接返回小程序段一个Promise,那么云函数会自动将这个Promse解析,然后返回解析后的值。而如果想将直接从这个Promise读取数据,显然是只能返回undefine了,
解决办法
使用await
关键字,要求Promise进行解析,解决后的代码如下
let accessToken = await db.collection('wxConfig').where({
name: "AccessToken"
}).get();
accessToken = accessToken.data[0].value
return accessToken;
关于Promise的使用,详细见博文