微信小程序云函数查询云数据库返回指定单列的数据

问题描述

用云函数获取云数据库中的值时,想只取得某一列的值返回,代码写成如下所示

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.dataundefined?!
但是,将代码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的使用,详细见博文

你可能感兴趣的:(微信小程序)