[英]how to get result data from async fetch inside another function
我正在尝试使用异步获取调用从服务器获取数据,但结果看起来像一个空的异步 function。我做错了什么?
这是我的代码
function initAutoComplete (selector, params = []) {
let config = {
selector: selector,
data: {
src: async () => {
try {
let myurl = `/component/get_states?country_id=64`; // http://localhost
const response = await fetch(myurl)
const source = await response.json();
console.log('source', source); // ==> this doesn't even appear in the console log
return source;
} catch (err) {
return err;
}
},
keys: ["state_name"],
cache: true,
},
};
console.log('config', config.data);
return config;
}
const asd = initAutoComplete('#state_name');
console.log('asd', asd.data);
尽管当我使用 postman 测试 url 时,它显示的数据符合预期
[
{
"id": "17",
"state_name": "Bali",
"country_name": "Indonesia"
},
{
"id": "16",
"state_name": "Banten",
"country_name": "Indonesia"
},
{
"id": "7",
"state_name": "Bengkulu",
"country_name": "Indonesia"
},
]
您的代码显示调用initAutoComplete()
,但所做的只是定义一个包含data.src()
function 的config
object,但您显示的任何内容都不会调用该 function。
因此,根据此代码,function 永远不会执行,也不应该执行。 function 已定义,但未调用。
你会用这个:
const asd = initAutoComplete('#state_name');
asd.data.src().then(result => {
console.log(result);
}).catch(err => {
console.log(err);
});
实际调用async
function。
此外, return err
可能是在您的src()
function 中进行错误处理的错误方法。您想要async
function 返回的 promise 以在您收到错误时拒绝。 正如您现在所做的那样,调用者很难分辨结果和错误条件之间的区别,因为您只是以两种方式返回一个值。 调用者可能必须检查已解析的值以查看它是否是一个 instanceof Error 以辨别结果是否为错误。
如果您删除src()
function 中的try/catch
,那么拒绝将自动发生,这很可能是您想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.