散步的羊
散步的羊
  • 发布:2022-12-20 14:21
  • 更新:2022-12-20 17:02
  • 阅读:173

定时器任务没有更新数据数,看日志是有执行的,但是在请求那里就不执行下去了

分类:uniCloud

const getToken = (appid,appkey) => {  
    return new Promise(async (resolve, reject) => {  
        console.log('开始获取')  
        const { data } = await uniCloud.httpclient.request(`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${appkey}`, {  
            contentType: 'json', // 指定以application/json发送data内的数据  
            dataType: 'json', // 指定返回值为json格式,自动进行parse  
        });  
        console.log('获得到的token',data)  
        const db = uniCloud.database();  
        // 获取 `user` 集合的引用  
        const collection = db.collection('chart-token');  
        // 先删除所有数据  
        // await collection.where({}).remove();  
        const key = `${appid}_token`;  
        // 再插入数据  
        // collection.add({`${appid}_token`: data.access_token || '' });  
        await collection.where({}).update({[key]: data.access_token || '' });  
        console.log('插入成功',key,data.access_token)  
        resolve(data);  
    })  
};  
exports.main = async (event, context) => {  
  //event为客户端上传的参数  
  Object.keys(config).forEach((key) => {  
    const appid = config[key].appid;  
    const secret = config[key].secret;  
    console.log(key, appid, secret);  
        getToken(appid,secret)  
  });  

  //返回数据给客户端  
  return event;  
};

当云函数使用,调用正常,但是定时执行,看日志是有执行,但每次都是执行到 await uniCloud.httpclient.request(这里,就没了,下面的不会执行了

2022-12-20 14:21 负责人:无 分享
已邀请:
DCloud_uniCloud_CRL

DCloud_uniCloud_CRL

main 里面没有等待 getToken 执行完成,云函数就销毁了。

  • 散步的羊 (作者)

    非常感谢指点,现在我在forEach里面加上awiat还是一样,await getToken()也不会执行完,就被销毁了,这种情况需要怎么处理呢,谢谢

    2022-12-20 15:41

  • DCloud_uniCloud_CRL

    回复 散步的羊: 不要使用forEach,forEach其实是 for 循环的callback,不会等待执行的。

    2022-12-20 20:41

散步的羊

散步的羊 (作者)

已解决,原因是用了forEach,在定时器里不会等待

该问题目前已经被锁定, 无法添加新回复