【发布时间】:2021-06-21 04:43:08
【问题描述】:
如果我知道如何解决它,我在家里。 我现在的问题是保存异步函数的结果。 如果我在该函数之后执行console.log,那么我将收到翻译后的值,但片刻之后,当我检查我的动词在打包成对象后的样子时,我将收到未翻译的值。有人知道为什么吗?
private translate(file: any) {
const keys = Object.keys(file)
const values = Object.values(file) // [!] - English Value at start, it's ok
values.forEach( async (value, index) => {
if( typeof(value) === 'object') {
value = this.translate(value)
} else {
const translateResult = await this.GetTranslatedByResstring(keys[index], 1045).toPromise()
value = translateResult.getPhrase()
console.log(value) // [!] <- Polish Value, it's ok
}
})
const zipObj = xs => ys => xs.reduce( (obj, x, i) => ({ ...obj, [x]: ys[i] }), {})
const obj = zipObj (keys) (values)
console.log(obj) // [!] <- English Value, it's not ok, i need Polish value inside
return obj
}
#更新 1
调用翻译的地方:
public async getTranslatedJson(
sourceFile: File,
originLanguage: Language,
destinatonLanguage: Language
): Promise<string> {
const file = await this.getFile(sourceFile)
const parsedFile = JSON.parse(file)
const translatedFile = this.translate(parsedFile)
return null
}
#更新 2
我的 getFile 函数:
private getFile(
sourceFile: File
): Promise<string> {
return new Promise((resolve) => {
const file = sourceFile[0]
const fileReader = new FileReader();
fileReader.onloadend = (e) => {
const testResult = fileReader.result.toString();
resolve(testResult);
}
fileReader.readAsText(file, "UTF-8");
});
}
【问题讨论】:
-
忽略
.forEach()不关心async回调的事实......为什么还有.forEach()?value只会得到values中最后一个“值”的结果 -
我只需要翻译该对象中的每个元素,我不在乎它是 foreach、for 还是其他类型的循环,我只需要翻译它们
-
脚本中的任何内容都不会尝试更改
values的内容。看看Promise.all()和How do I return the response from an asynchronous call? -
我尝试做任何事情但我厌倦了它,我工作了大约 1 个月。
-
或许不需要将 observable 转换为 promise?
translate()函数是如何以及在哪里调用的?调用者如何期望响应?
标签: angular typescript object asynchronous