[英]Proper way to await multiple async functions with Google Cloud Functions Node.JS
[英]Google Cloud Storage (Js), Async/Await & Cloud Functions Errors
这已经在Google SIDE上解决了
Google Cloud NodeJs库现已修复集成。 保留这个问题仅供参考。
原始问题
我希望我的代码干净(呃)并使用Typescript和async / await编写访问Google云端存储的云功能。
我的tsconfig.json
一些重要部分:
{
"compilerOptions": {
"declaration": false,
"target": "es6",
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"noUnusedLocals": true,
"moduleResolution": "node",
"sourceMap": false,
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2016"
],
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"outDir": "./"
}
}
我遇到的第一个错误是ECONNRESET
,我正在进行这样的调用,这可能导致它:
await bucket.file(path).download({
destination: tempFilePath
})
我认为其余的功能没有等到这行完成,整个函数执行在文件从GCS下载到临时路径之前结束。 所以我将该部分放入try / catch块:
try {
await bucket.file(path).download({
destination: tempFilePath
})
} catch (error) {
console.log(error);
}
它工作得很好,直到今天。 今天我有这个错误:
convert: Empty input file '/temp/img-file.jpg'
这让我觉得在将文件从桶下载到临时文件夹之前执行下一行(转换图像大小)。
我错过了什么吗?
显然我犯了一些错误,因为还有很多库没有正确的type definitions
,或根本没有,包括谷歌,我猜错了。
使用没有Type Definitions
库时要小心,并打开它们的源以查看返回类型。
在搜索解决方案时,我也遇到了这个问题: 与GCS权限相关的错误和要修复的bash脚本 。 如果你读到这个答案,也许你的问题与此有关,所以我也在这里分享。
更新:我再次看到一个错误,所以要加倍确保我在try/catch
包含了两个异步调用:
let myBucket : any = {};
try {
myBucket = await googlecloudstorage.bucket('<bucket-id>');
await myBucket.file(path).download({
destination: tempFilePath
})
} catch (error) {
console.log(error);
}
更新2:仍然有错误,尝试在Typescript中找出它但我打算回到普通的javascript。 此外,我已经尝试使用批处理文件更新ACL,正如我在上面提供的链接问题中所解释的那样,似乎没有帮助。
更新3(希望成为最后一个):嗯,对于与Google云端存储相关的呼叫,我现在使用普通的javascript promises并抛弃async / await,就像Firebase-Functions Samples repo中使用的那样,到目前为止一直很好。
更新4:在更改我的代码后,上传/读取不一致时,我一直收到错误。 进一步搜索和......
从描述相同问题的另一个问题中读取此答案 。 基本上不是我们,而是他们,但他们不承认。 这是因为google-cloud-node
包使用套接字的方式。 如果有一些理智的解决方法,它会在这里发布。
更新5:
以下是不要永久保持套接字打开的方法:
var gcs = require('@google-cloud/storage')(...)
gcs.interceptors.push({
request: function(reqOpts) {
reqOpts.forever = false
return reqOpts
}
})
...现在似乎有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.