【发布时间】:2020-06-28 22:47:55
【问题描述】:
我正在尝试调用以下函数。已经尝试过 await 和 Promise.all() 但我仍然看到我的 firebase 函数在 get 请求返回之前执行完成。代码最终完成,但由于 firebase 的工作方式,它需要 2 或 3 分钟,因为 firebase 将其作为某种后台任务运行。
我在执行函数的每一行都设置了日志记录。当它到达调用 (request.get) 的行时,firebase 停止并退出。我也尝试在这里添加等待,但代码不会阻塞和等待。
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 对象 - 这不是必需的。请编辑问题以提供 MCVE:stackoverflow.com/help/minimal-reproducible-example
-
此处使用的 @DougStevenson
request.get()不会返回承诺,这可能是 OP 明确创建自己的承诺的原因。 -
@FrankvanPuffelen 哦,好吧,
request有一个版本,它返回一个承诺。令人惊讶的是,它被称为request-promise。 -
是的,这是一个附加包。尽管现在大多数人转而使用
fetch。
标签: javascript firebase async-await google-cloud-functions