我正在尝试设置一个小型网上商店,而firebase功能是我用来安全创建和更新 firebase中付款节点的工具。
创建付款后,用户将被重定向到第三方付款服务。
通过这些两个功能,我遇到了所谓的“冷启动”#34;。
当功能很冷并且需要预热时,需要> 1min用于重定向用户并使两个功能都很好地执行。当函数预热时,一切正常,时间少于5秒,当用户被重定向到另一个网站时,我觉得这是可以接受的。
我想让它们一直保持温暖,所以这些是我考虑的选择:
第一种选择是不防水的,有时会冷,有时则不防水。并编写更好的代码,以及我需要帮助的地方。这是最重要的功能:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import * as request from 'request-promise-native';
admin.initializeApp(functions.config().firebase);
export const mollieCreatePayment = functions.database
.ref('/orders/{orderId}')
.onWrite(event => {
const order = event.data.val();
const orderId = event.params.orderId;
const userId = order.userId;
const optionsAPI = {
method: 'POST',
uri: 'https://api.mollie.nl/v1/payments',
body: {
"amount": totalAmount,
"description": "Bestelling " + orderId,
"redirectUrl": environmentVariables.domainUrl + "/order-success/" + orderId,
"webhookUrl": environmentVariables.webhookUrl
},
headers: {
"Authorization": "Bearer " + environmentVariables.mollieKey
},
json: true // Automatically stringifies the body to JSON
};
request(optionsAPI)
.then(async mollieResponse => {
await updateOrCreatePaymentInDb(userId, orderId, mollieResponse);
await updatePaymentIdInOrder(orderId, mollieResponse.id);
return;
})
.catch(function (err) {
console.log(err);
});
});
答案 0 :(得分:2)
您没有从此函数返回一个在所有异步工作完成时完成的promise。未能从后台函数(非HTTP函数)返回承诺可能导致函数超时,因为云函数不知道工作何时完全完成。
使用promises和async / await的混合似乎对我来说是一种反模式。 IMO你应该链接承诺或使用一系列等待,而不是两者,并且绝对不会等待承诺处理程序。