javascript - 我想将来自 s3 对象的字符串发送到客户端
问题描述
我在将来自 s3 对象主体的字符串发送到客户端时遇到问题
我正在将 aws sdk 用于节点,并使用 apollo server(express)、express、react
我确实从 s3 获取了对象并创建了可读流。然后我听数据事件,所以我可能会向客户端发送字符串
let data = '';
s3.getObject(params).createReadStream().on('data', function(chunk) {
data += chunk;
});
return { data }
我认为数据不是空字符串,但它是空字符串我该怎么做才能解决这个问题?
编辑:
let data = '';
function promiseBasedRequest (params) {
return new Promise((resolve, reject) => {
s3.getObject(params).createReadStream()
.on('data', function (chunk) {
data += chunk;
})
.on('end', function () {
resolve(data);
})
.on('error', function (err) {
reject(err);
});
});
}
await promiseBasedRequest(params);
这按我的意图工作。
解决方案
您不是在等待写入end
. 首先,该函数需要是异步的 Promise 或回调。
function getData(params) {
let data = ''
return new Promise((res, rej) => {
let data = '';
s3.getObject(params).createReadStream()
.on('data', function (chunk) {
data += chunk;
})
.on('end', function(){
res(data);
})
.on('error', function(){
rej()
})
})
}
您可以通过以下方式使用该功能:
(async(){
const data = await getData()
})();
或者getData().then(..)
编辑:另外,getObject
也有一种promise
方法。
s3.getObject(params).promise().then(...).catch(...)
推荐阅读
- linux - Nginx + DirectAdmin
- python - Selenium 不支持的命令 selectWindow
- python - 使用 python 子进程使用带有 bashrc 文件的“源”linux 命令
- postgresql - 如何使用函数 regexp_split_to_table #postgresql 创建原子行
- python - 如何计算来自不同 lda 模型的主题之间的余弦相似度?
- offset - filebeat 注册表文件显示偏移量为 0
- python - 限制平衡每日覆盖率
- python - 通过计算雅可比行列有效地使用 PyTorch 的 autograd 和张量
- sql - UPDATE/MERGE 必须与每个目标行最多匹配一个源行
- python - 如何提高我在 google colab 中的代码速度 | 谷歌 Colab | 蟒蛇 |