如何使用 fetch 从一个模块导出从 GET API 获得的响应数据到另一个模块

Posted

技术标签:

【中文标题】如何使用 fetch 从一个模块导出从 GET API 获得的响应数据到另一个模块【英文标题】:How to export the response data obtained from a GET API using fetch from one module to another 【发布时间】:2021-04-10 07:39:19 【问题描述】:

代码片段:

let data =;

zlFetch('http://localhost:3000/new.json')
        .then(response =>  handleget(response))
        .catch(error => console.log(error));

function handleget(response)

   data = response.body;


export default data

现在我想导出这些数据,以便在其他代码中导入相同的数据。

现在我知道,由于解决承诺是异步的,因此数据将是 。 但是,如果我尝试从 handleget 函数内部导出,则会收到一条错误消息,指出导入导出应该位于文档的顶层。

那么我如何从获取响应中提取数据并将其存储在 then() 范围之外的变量中,然后将其导出到其他位置

【问题讨论】:

【参考方案1】:

使用 Quentin 提供的答案,这是我的最终代码以及来自 fetch 请求的错误处理的样子

//Logic.js
const data = zlFetch('http://localhost:3000/new.json')
        .then(response =>  response)
        .catch(error => console.log(error));

export default data

//App.js
import data from "./Logic.js";

async function fetch_this_data()
    
        const res = await data.then(result => result);
        
            if (res.status == 200)
            
                console.log("res"+JSON.stringify(res.body));
                return res.body;
            
            else
            
                console.log("resu"+JSON.stringify(res));
                return "Error!! Status "+res.status;
            
        
    

fetch_this_data();

【讨论】:

【参考方案2】:

你不能。

它是异步的。

data 值的导出发生在收到响应之前。

将从catch 返回的承诺分配给data

然后在你导入promise之后处理它。

const data = zlFetch('http://localhost:3000/new.json')
        .then(response =>  resonse.body)
        .catch(error => console.log(error));

export default data;

稍后

import newthing from './myModule';
newthing.then(data => ...);

【讨论】:

谢谢!把我的头撞在墙上。我想我需要更多时间来了解一下 JS 的这个异步部分

以上是关于如何使用 fetch 从一个模块导出从 GET API 获得的响应数据到另一个模块的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 fetch 从 Promise 回调中返回返回值? [复制]

Fetch Api:无法从本地主机获取数据

ant design 中,使用dva/fetch 设置导致无法从后台导出excel的问题

如何从 fetch 中获取响应的标头

如何以角度将组件从一个模块导出和导入到它的子模块

如何从 javascript/typescript 模块文件(导入/导出)访问 Vuex 商店?