【发布时间】:2020-04-18 01:36:42
【问题描述】:
在这里尝试使用云功能进行一些小技巧,但似乎无法弄清楚问题所在。
我目前正在使用 now.sh 来托管无服务器函数,并希望从另一个函数调用 1 个函数。假设我有 2 个函数声明为 fetchData 和 setData。当调用setData 函数时,它会处理一些数据,然后调用fetchData 函数。
export const setData = async (req: Request, res: Response) => {
await axios.post(
fetchDataEndpointUrl,
{
params: {
key,
},
},
);
return res.json({
payload: true,
});
}
上面的代码工作正常,但是完成整个操作所花费的时间将是 setData 函数调用 + fetchData 函数调用完成所花费的时间。我要做的是调用fetchData,而不必等待它完成基本上删除axios调用中的await。我试过删除await,但是当setData 通话结束时通话突然结束。有没有办法解耦这个动作而不必等待setData函数完成?
【问题讨论】:
-
本质上
setData是一个后台任务。我不确定now.sh上的基础架构,但您通常会使用一些pub/sub架构来实现它。我在GCP上做过类似的事情 -
setData是否接受next参数?也许在链的第一个砖块中返回响应,然后在单独的砖块中调用 axios 函数可以吗? more here -
@shukar 考虑到这是一个无服务器架构,我认为通过网络传递
next函数没有任何用途。 -
我已经用 Firebase Cloud Functions 做过类似的事情,我会使用“触发”HTTPS 请求,它将预期的工作保存到 Cloud Firestore,触发 secondary Cloud Function 来执行长时间运行东西。这样做的好处是客户端还可以监听该 Firestore 文档的更新以获取结果
标签: javascript node.js typescript google-cloud-functions vercel