如何取出异步流程的结果并作为模块导出?

大概思路是这样的:

  • fetch.js -> 请求函数的封装
  • index.js -> 调用fetch.js中导入的函数,对其返回值进行处理,再导出
  • result.js -> 对index.js中的导出进行最后的处理

问题就在于,index.js中调用的是异步函数,如果把它放在一个内部是async函数的IIFE中执行,那么能顺利得到返回值并处理,但是不能把得到的结果导出...(因为被包在里面不能export default)

想请问一下大佬们有什么办法能把异步流程的结果释放到全局中吗...

fetch.js

interface IFetchProps {
  (app_key: string, city: string): any;
}

const fetchData: IFetchProps = async (app_key, city) => {
  return new Promise((resolve, reject) => {
    axios
      .get(
        `https://api.jisuapi.com/weather/query?appkey=${app_key}&city=${city}`
      )
      .then((res: any) => {
        resolve(res);
      });
  });
};

(另一种写法)
image.png

index.js

(async () => {
  const test = await getData(app_key, encodeURI(city));
  console.log(test);
  // ...一些处理
  const data = "ssss";
  // 如何导出?
})();
阅读 8.4k
3 个回答

直接 export default 就好了,async 函数的返回值就是 Promise 实例。即:

const result = (async () => {

})();
export default result;

另外,你的 fetchData 写得太荒唐了吧?axois 返回的就是 Promise 实例,结果你还把它包一层;更莫名其妙的是它本来就是个 asynchronous 函数。

先好好读读文档把 Promise 和 async/await 搞懂再说吧。

同样操作就好了,重点是哪里需要数据时才在哪里获取,不应该在初始化模块的时候就获取数据。

// index.ts
export const getData = async () => {
    const res = await fetchData(app_key, encodeURI(city));
    return res
}

你直接导出异步方法,在result.js里用().then()也可以呀

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题