// Update Stripe default card based on user choice
exports.updateDefaultSource = functions.firestore
.document("users/{userId}")
.onUpdate(async (change, context) => {
const newValue = change.after.data();
const previousValue = change.before.data();
console.log("previousValue.default_source: "+previousValue.default_source)
console.log("newValue.default_source: "+newValue.default_source)
if (
previousValue.default_source &&
newValue.default_source !== previousValue.default_source
) {
// this triggers on every update to profile (more overhead), can we reduce this?
try {
console.log("newValue.default_source: "+newValue.default_source)
const response = await stripe.customers.update(
previousValue.customer_id,
{ default_source: newValue.default_source },
(err, customer) => {
console.log(err);
}
);
return console.log("Response from Stripe update: " + response);
} catch (error) {
console.log(error);
await change.ref.set(
{ error: userFacingMessage(error) },
{ merge: true }
);
return reportError(error, { user: context.params.userId });
}
}
});
的{{1}}回调函数给了我两个句柄。 MONITORENUMPROC
类型之一和EnumDisplayMonitors
类型之一。
HMONITOR
应该引用监视器。HDC
是该监视器的设备上下文的句柄。在从回调函数返回之前,是否需要释放所有这些句柄?如果没有,他们会待多久?我可以保存以备后用吗?
答案 0 :(得分:0)
我是否需要释放所有这些手柄,然后才能从 回调函数?
否,除非在文档中明确声明要发布,例如GetWindowDC
函数:绘制完成后,必须调用ReleaseDC
函数以释放设备上下文。 / strong>
我可以保存它们以备后用吗?
一般来说,是的。物理显示器具有相同的HMONITOR
,只要它是桌面的一部分即可。发送WM_DISPLAYCHANGE
消息时,任何监视器都可能从桌面上删除,因此其HMONITOR
无效或已更改其设置。因此,应用程序应在发送此消息时检查所有HMONITOR
是否有效。
HDC
句柄来自EnumDisplayMonitors
,其生命周期取决于HDC
中的EnumDisplayMonitors
参数。