Firebase云功能在所有功能运行之前完成



我正在尝试调用以下函数。我已经尝试过wait和Promise.all((,但在get请求返回之前,我仍然看到我的firebase函数执行完成。代码最终完成,但由于firebase的工作方式,它需要2到3分钟,因为firebase将其作为某种后台任务运行。

我已经在执行函数的每一行都放置了日志记录。当它到达调用(request.get(的线路时,firebase停止并退出。我也尝试在这里添加wait,但代码不会阻塞和等待。

function fetchUserLogoBase64(userId) {
return new Promise(async function(resolve, reject) {
const userSettings = await getDocument("user-settings", userId);
const downloadUrl = userSettings.company.logoDownloadUrl;
if (!downloadUrl) return null;
request.get(downloadUrl, function(error, response, body) {
if (!error && response.statusCode === 200) {
data =
"data:" +
response.headers["content-type"] +
";base64," +
new Buffer(body).toString("base64");
resolve(data);
}
reject(error);
});
});
}

您将promise与async/await混合使用,这使得在使用任何一个时都更难跟踪正在发生的事情。我建议选择promise或async/await,然后只使用它们。

对于纯承诺,此代码看起来像:

function fetchUserLogoBase64(userId) {
return new Promise(function(resolve, reject) {
getDocument("user-settings", userId).then(function(userSettings) {
const downloadUrl = userSettings.company.logoDownloadUrl;
if (!downloadUrl) resolve();
request.get(downloadUrl, function(error, response, body) {
if (!error && response.statusCode === 200) {
data =
"data:" +
response.headers["content-type"] +
";base64," +
new Buffer(body).toString("base64");
resolve(data);
}
reject(error);
});
});
});
}

相关内容

  • 没有找到相关文章

最新更新