Ber*_*ian 3 interop filereader blazor
我正在尝试使用JSInterop提供的读取一些文件Blazor。问题是,即使在.C#我等待该方法,似乎它也没有。因此await我无法检索 提供的结果js。
C#
<input name="start" type="file" onchange="@(async(x)=>await OnChangeS(x))" />
@functions{
private const string S = "start";
public async Task OnChangeS(UIChangeEventArgs ev) {
var str = await JSRuntime.Current.InvokeAsync<string>("methods.readFile", S);
Console.WriteLine("From blazor data is:" + (string.IsNullOrEmpty(str) ? "empty" : str));
}
}
Run Code Online (Sandbox Code Playgroud)
JS
window.methods = {
readFile: function (fileName) {
let reader = new FileReader();
var file = document.querySelector('input[type=file ][name=' + fileName + ']').files[0];
var data = null;
reader.onload = () => {
data = reader.result;
console.log("from load data is"+data);
};
reader.onloadend = () => { console.log("from loadend data is"+data);return data };
reader.readAsText(file);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
给定一个示例json文件: { "name":"adita","age":33}这是我的输出顺序:
WASM: Blazor S:empty
Fread.js:11 from load data is: {
"name":"adita",
"age":33
}
Fread.js:14 from loadend data is: {
"name":"adita",
"age":33
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么该方法不等待Blazor?
我已经通过将FileReader结果包装在 . 中解决了这个问题。正如@Kirk Woll指出的Promise那样,我实际上并没有发回任何东西。
window.methods = {
readFile: function (fileName) {
let reader = new FileReader();
return new Promise((resolve, reject) => {
var file = document.querySelector('input[type=file ][name=' + fileName + ']').files[0];
reader.onerror = () => { reader.abort(); reject("Error parsing file"); };
reader.onload = () => {
var data = reader.result;
console.log("from load data is: " + data);
resolve(data);
};
reader.readAsText(file);
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3491 次 |
| 最近记录: |