https://docs.cloudbase.net/cloud-function/deep-principle [图片] 第一点意思是main return之后进程就会冻结,异步任务可能不会执行; 第二点可以接受,相当于进程重启 第三点意思是不是用node.js 10及以上版本就不会出现第一点的问题?
云函数中异步相关问题?云函数版本:Nodejs16.13 环境:生产 //伪代码 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database(); exports.main = async (event, context) => { //并行 const task1 = db.collection('xx').xx.get() const task2 = db.collection('xxx').xx.get() const data1 = (await task1).data; const data2 = (await task2).data; //... //异步执行 db.collection('xx').where(..).update(..); db.collection('xxx').where(..).update(..); return { success: true } } 偶然发现上述代码中两个update没有await等待,结果也正常执行。继续改造测试(云函数本地调试): //伪代码 exports.main = async (event, context) => { //... //异步执行 backgroundTask(); console.log('return data ' + new Date()) return true } async function backgroundTask() { console.log('sleep ' + new Date()) await new Promise(resolve => setTimeout(resolve, 5000)) console.log('done ' + new Date()) } //云函数本地调试 Console [info] 函数被触发,正在执行中... cloudFunctionTest.js:97 sleep Sun Nov 12 2023 14:23:55 GMT+0800 (中国标准时间) cloudFunctionTest.js:38 return data Sun Nov 12 2023 14:23:55 GMT+0800 (中国标准时间) node.js:1 [info] 函数执行成功(耗时 366ms) true node.js:1 [info] 调用 本地 云函数 'myFunctions' 完成 (耗时 370ms) cloudFunctionTest.js:99 done Sun Nov 12 2023 14:24:00 GMT+0800 (中国标准时间) 按文档描述,云函数并不是执行完就立马销毁,似乎云函数内可以执行一些短期的异步任务?
2023-11-12