我正在尝试从文件中读取数据,并使用jquery的get函数将其保存到数组中。但是,由于get函数是异步的,因此$ .get函数调用之后的代码将运行,并且数据未定义。仅在调用完成并返回数据之后,如何才能在$ .get函数调用之后运行代码?
我尝试将async设置为false,但是控制台日志给出了不推荐使用的错误。
class CharacterDatabase{
constructor(fName){
this.fileText = readFile(fName);
this.fileText = this.fileText.split(/[\r\n]+/);
}
}
function readFile(fName){
console.log(fName);
$.get(fName, function(data){
return data;
}, "text");
}
var cd = new CharacterDatabase("text.txt");
错误:
main.js:32 Uncaught TypeError: Cannot read property 'split' of undefined at new CharacterDatabase (main.js:32) at main.js:85
被抛出到控制台中。
第32行是:
this.fileText = this.fileText.split(/[\r\n]+/);
将async设置为false时,错误状态表明不赞成使用同步XMLHTTPRequest。
答案 0 :(得分:0)
一个简单的解决方案是将呼叫包装在Promise
中并使用async/await
:
class CharacterDatabase{
constructor(fName){
this.init();
}
}
async function init() {
this.fileText = await readFile(fName);
this.fileText = this.fileText.split(/[\r\n]+/);
}
async function readFile(fName){
console.log(fName);
await new Promise((resolve) => {$.get(fName, function(data){
resolve(data);
}, "text")});;
}
var cd = new CharacterDatabase("text.txt");
作为附带说明,我通常不建议在构造函数中放置任何I / O操作。