我似乎找不到从异步值访问值的方法,因为它总是返回未定义的值,我想等待函数结束然后检索值,但它不起作用... >
async UploadFile(file): Promise<any> {
let ipfsId: any
const fileStream = fileReaderPullStream(file)
await this.ipfs.add(fileStream, { progress: (prog) => console.log(`received: ${prog}`) })
.then((response) => {
ipfsId = response[0].hash
console.log(ipfsId)
return ipfsId
//window.open("localhost:8080/ipfs/" + ipfsId);
//window.open("https://ipfs.io/ipfs/" + ipfsId);
}).catch((err) => {
console.error(err)
})
}
这是我的电话:
uploadFile(event) {
const fileSelected: File = event.target.files[0];
(async() => {
this.temp_ipfs_hash = await this.IPFS.UploadFile(fileSelected)
.then((response) => console.log(response))
console.log(this.temp_ipfs_hash)
})()
}
我想访问返回值,但它总是返回未定义或错误值... 任何人都知道我可以在这里尝试什么?
非常感谢您的宝贵时间! :)
编辑:我不知道发布图像是错误的,所以抱歉,我已经更改了它!抱歉! :(
答案 0 :(得分:0)
UploadFile应该返回一个Promise,它目前不返回任何内容。 为了兑现承诺,您应该将最后一行替换为
return this.ifps.add(...).then(...).catch(...);
使用await的替代方法:返回await,这是promise返回的结果值
return await this.ifps.add(...).then(...).catch(...);
在呼叫者中,您可以记录结果,就像没有承诺一样:
console.log(this.UploadFile(fileSelected));
答案 1 :(得分:0)
您同时使用了基于promise的和异步等待的,您的上传文件功能应该返回一个promise,然后解析为适当地拒绝它,或者如果您要坚持异步等待机制,那么您的上传文件功能将必须更改。假设foobar是一个异步函数,例如ipfs.add
,这是应该使用async await的方式async function foo() {
let results = await foobar();
return results;
}
这是您如何称呼此类foo
async function bar() {
let fooResults = await foo();
console.log(fooResults);
}