【发布时间】:2020-12-12 20:32:13
【问题描述】:
这是我的 Promise 函数,我遍历 Azure BlobStorage 中的每个 blob,然后读取每个 blob。 console.log(download) 将值作为 JSON 传递。
但是要关闭 return new Promise 函数,我希望 resolve 应该从读取 blobstream 中返回 JSON 数据。但就我而言,解决不会导致任何结果。
在 Angular Service.ts 文件中,代码如下所示:
getData(): Promise<JsonData[]> {
return new Promise(async resolve => {
const containerName = "blobcontainer";
const containerClient = this.blobServiceClient.getContainerClient(containerName);
//list blobs
let i = 1;
async function main() {
i = 1;
for await (const blob of containerClient.listBlobsFlat()) {
console.log(`Blob ${i++}: ${blob.name}`);
const blockBlobClient = containerClient.getBlockBlobClient(blob.name);
//console.log(blockBlobClient)
const downloadBlockBlobResponse = await blockBlobClient.download(0);
const download = await blobToString(await downloadBlockBlobResponse.blobBody)
//console.log(downloadBlockBlobResponse)
console.log(download)
}
}
async function blobToString(blob: Blob): Promise<string> {
const fileReader = new FileReader();
return new Promise((resolve, reject) => {
fileReader.onloadend = (ev: any) => {
JSON.parse(ev.target!.result)
resolve(JSON.parse(ev.target!.result));
};
fileReader.onerror = reject;
fileReader.readAsText(blob);
});
}
const _blob = await main().catch((err) => {
console.error('message'); return null
});
resolve(_blob) //resolve should return downloaded JSON file, but it didn't
})
}
然后在组件文件中,我想从解析中检索数据,它应该返回 JSON 字符串变量,如“name”、“timestamp”、“value”——但在我的例子中,您从 blob 接收元数据而不是内容。表示 service.ts 文件未正确编程:
xy.component.ts
export class xyComponent implements OnInit {
@Input() title: string;
//jsondatas: Array<JsonData> = [];
jsondata: JsonData;
name: String;
timestamp: string;
value: number;
//constructor() { }
private jsonlistService: JsonDataService;
jsondatas: JsonData[]=null;
constructor(private jsonService: JsonDataService) {
this.jsonlistService = jsonService;
}
ngOnInit(): void {
this.jsonlistService.getData()
.then(results => this.jsondatas = results);
console.log(this.jsonService)
}
}
编辑:
即使我在 main 函数中return download,从 main() 解析也不会传递 json 字符串。
第二次编辑: 这里是 sn-ps 如何返回数据:
async function main() {
i = 1;
for await (const blob of containerClient.listBlobsFlat()) {
console.log(`Blob ${i++}: ${blob.name}`);
const blockBlobClient = containerClient.getBlockBlobClient(blob.name);
//console.log(blockBlobClient)
const downloadBlockBlobResponse = await blockBlobClient.download(0);
const download = await blobToString(await downloadBlockBlobResponse.blobBody)
//console.log(downloadBlockBlobResponse)
console.log(download)
return download
}
}
但是我没有收到下载的文件,错误还是一样。 如果你能帮助我,那就太好了
【问题讨论】:
-
你用
main()的返回值来解决它……它有noreturn声明! -
@Quentin 哦,我要返回的变量是“下载”,但如果我返回下载没有任何更改,请参见上面的代码
标签: javascript angular typescript