参见英文答案 >
How do I return the response from an asynchronous call?33个
> How to return data from promise4个
> How to get response data outside promise chain of Fetch? 1个
我正在使用fetch从api获取数据json.工作正常,但我必须重复使用它进行各种调用,因此它需要是同步的,否则我需要一些方法来在每个组件的提取完成时更新接口.
> How to return data from promise4个
> How to get response data outside promise chain of Fetch? 1个
我正在使用fetch从api获取数据json.工作正常,但我必须重复使用它进行各种调用,因此它需要是同步的,否则我需要一些方法来在每个组件的提取完成时更新接口.
function fetchOHLC(yUrl){ fetch(yUrl) .then(response => response.json()) .then(function(response) { alert(JSON.stringify(response.query)); var t = response.created; var o = response.open; var h = response.high; var l = response.low; var c = response.close; return {t,o,h,l,c}; }) .catch(function(error) { console.log(error); }); } var fetchData = fetchOHLC(yUrl); alert(fetchData); // empty ?
除了使用fetch之外,还有其他方法可以实现吗? (我不想优先使用jquery).
谢谢
编辑
问题是关于fetch-api,而不是ajax,而不是jquery,所以请不要在没有正确阅读的情况下将其标记为重复这些问题.如果您仍然觉得有必要这样做,请停止将其与十年前的问题和答案联系起来,十年后会发生很多变化.
解决方法
你希望你的fetch函数返回:
function fetchOHLC(yUrl){ return fetch(yUrl) .then(response => response.json()) .then(function(response) { alert(JSON.stringify(response.query)); var t = response.created; var o = response.open; var h = response.high; var l = response.low; var c = response.close; return {t,c}; }) .catch(function(error) { console.log(error); }); }
现在fetchData包含一个可以很容易使用的promise:
var fetchData = fetchOHLC(yUrl); fetchData.then(alert); //not empty ! its {t,c}
如果你想要一些花哨的ES7,你可以像这样重写整个事情:
async function fetchOHLC(yUrl){ try{ var r=JSON.parse(await fetch(yUrl)) alert(JSON.stringify(r.query)); return {t:r.created,o:r.open,h:r.high,l:r.low,c:r.close}; }catch(e){console.log(e);} } (async function(){ var fetchData = await fetchOHLC(yUrl); alert(fetchData); })()