let myObject = ( () => {
let run = async() => {
foo = new genericFunction();
status = await foo.myFunction();
}
})();
let genericFunction = function() {
this.getData = async () => {
$.getJSON("path/to/file.json", function (data) {
console.log("Apple", data.name);
return data.name;
}).fail(function(jqxhr, textStatus, error){
console.log("Loading Error :: ", error);
)};
}
this.myFunction = async () => {
let data = this.getData();
console.log('DATAA:::', data); //This should be the first output
}
}
问题是:
status
始终为= undefined
,因为它以某种方式在getJSON
执行之前返回,我不知道为什么。
答案 0 :(得分:1)
另一个FIle.js 应该类似于:
let genericFunction = function() {
this.getData = async () => {
var result = await $.getJSON("path/to/file.json", function (data) {
console.log("Apple", data.name);
return data.name;
}).catch(function(jqxhr, textStatus, error){
console.log("Loading Error :: ", error);
)};
return result;
}
this.myFunction = async () => {
let data = this.getData();
console.log('DATAA:::', data); //This should be the first output
}
}
答案 1 :(得分:1)
这是使用您的代码的简化示例,但有一些更改:
1)使用class
2)您不会从myFunction
返回任何内容,因此没有理由为status
分配某些内容-只需调用该函数即可。
3)getData
不需要async关键字,您需要从函数中返回promise(在本示例中,我模拟了一个AJAX调用,该调用会在几秒钟后返回数据)。
4)您确实需要await
才能返回myFunction
。您在那里有async
,也只需要添加await
关键字。
class GenericFunction {
getData() {
return new Promise(resolve => {
setTimeout(() => resolve('Hello World'), 2000);
});
}
async myFunction() {
let data = await this.getData();
console.log('DATAA:::', data);
}
}
(async () => {
const foo = new GenericFunction();
foo.myFunction();
})();