07 在云函数中等待异步结果返回

版本一

1、将异步调用定义在 Promise 对象里面

let vector = new Promise(function(resolve, reject){
  client.WordEmbedding(req, function (errMsg, response) {
    if (errMsg) {
      console.log(errMsg);
      reject(errMsg)
    }
    resolve(response.to_json_string())
  });
})

2、在云函数的 main 中 await 等待异步,数据存于变量
3、return 返回变量数据

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  await vector.then((v)=>data=v);
  return data
}

版本二

因为 Promise 对象创建后会立即执行,为了等待 main 中的参数再执行,修改如下:
1、把 new Promise 放在函数中返回

function vector() {
  let rtn = new Promise(function (resolve, reject) {
    client.WordEmbedding(req, function (errMsg, response) {
      if (errMsg) {
        console.log(errMsg);
        resolve(null)
      }
      resolve(response.to_json_string())
    });
  })
  return rtn
}

2、调用函数得到 Promise 对象

// 云函数入口函数
exports.main = async (event, context) => {
  let params = '{\"Text\":\"' + event.text + '\"}'
  console.log(params)
  await req.from_json_string(params);
  await vector().then((v) => data = v);
  return data
}

参考:
JS执行——Promise
(完)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。