提问人:IncredibleHLK 提问时间:12/25/2021 更新时间:12/25/2021 访问量:326
如何调用进行ajax调用的异步函数[duplicate]
How to call async function that makes an ajax call [duplicate]
问:
我已经看到了很多关于如何使用回调和等待的建议,以使我的异步 ajax 调用同步,但我没有成功。我有一个转折点。进行 ajax 调用的函数本身是异步的。以下是我使用回调的尝试。没有错误,但在 for/loop 中不会向控制台写入任何内容。此功能的目的是提示用户选择一个或多个文件,将其导入 SSRS,并使用表示新文件的新节点更新树控件。导入有效,并且从 ajax 调用(新节点 id)返回的数据是有效的,但是当我尝试使用它时它会丢失。任何帮助将不胜感激。
async function readText(event, multiple, data) {
var fileinfo = new Object();
fileinfo.Name = event.name;
fileinfo.Path = '/' + fullpath;
fileinfo.Replace = !multiple;
fileinfo.Id = selectedId;
array = new Uint8Array(await event.arrayBuffer());
fileinfo.Content = btoa(
new Uint8Array(array)
.reduce((data, byte) => data + String.fromCharCode(byte), '')
);
$.ajax(
{
url: '/ABIReportsSSRS/ImportToSSRS',
type: 'POST',
data: fileinfo,
success: function (data) {
return data;
},
error: function (request, status, error)
{
displayErrorMessage(request);
}
});
}
function importData(multiple) {
input = document.createElement('input');
input.type = 'file';
input.multiple = multiple;
var treeviewObj = document.getElementById('tree').ej2_instances[0];
input.onchange = _ => {
var newNode = [];
for (var i = 0; i < event.target.files.length; i++) {
readText(event.target.files.item(i), multiple, function (data) {
console.log(data);
newNode[i] = { Id: data, Name: event.target.files.item(i).name, Type: 'Resource', Image: '../../images/FA-file.png' }
});
}
if (multiple) {
treeviewObj.addNodes(newNode, selectedId, null);
}
else {
treeviewObj.updateNode(selectedId, event.target.files.item(i).name)
}
};
input.click();
}
答: 暂无答案
评论
readText
async
await
$.ajax
success
$.ajax
return data
newNode
readText
data