【问题标题】:ES6 Uncaught TypeError: Object(...) is not a functionES6 Uncaught TypeError: Object(...) is not a function
【发布时间】:2018-12-24 18:14:26
【问题描述】:

我从这个函数返回一个Promise

const liab_config = () => {
  return axios.get(`${config.server_url}/fetch_config_liab`);
}

export default { liab_config }

并试图在另一个文件中处理Promise

import liab_config from './utils/kc-adapter'

function set_liab_config(){
  liab_config().then((response) => {
    if(response.data.success){
      let { kc_config_liab } = response.data;
      return kc_config_liab['auth-server-url'];
    }
    else
      return null;
  }).catch(ex => 
    console.log(ex));
  }

这里我得到的错误是:

Uncaught TypeError: Object(...) is not a function

在线liab_config().then((response)。可能是什么原因?

【问题讨论】:

  • export default liab_config
  • 应该是import {liab_config} from './utils/kc-adapter'
  • @TanDuong export default 意味着我可以在没有{}的情况下导入
  • 但是我看到你要导出对象export default { liab_config }
  • 是的,我猜这就是问题

标签: javascript ecmascript-6 es6-promise


【解决方案1】:

您正在默认导出一个对象字面量。您想使用命名导出

const liab_config = …;
export { liab_config as liab_config }
// shorter:
const liab_config = …;
export { liab_config }
// or just:
export const liab_config = …;

import { liab_config } from './utils/kc-adapter'

或默认导出

const liab_config = …;
export { liab_config as default }
// or just:
default export const liab_config = …;
// or without the local name:
default export …;

import liab_config from './utils/kc-adapter'

【讨论】:

    【解决方案2】:

    当你访问这样的东西时

    import liab_config from './utils/kc-adapter'

    这意味着您要求默认导出,必须像这样写

    const liab_config = () => {
      return axios.get(`${config.server_url}/fetch_config_liab`);
    }
    
    export { liab_config as default };
    

    或者像这样

    const liab_config = () => {
      return axios.get(`${config.server_url}/fetch_config_liab`);
    }
    
    export default liab_config;
    

    如果您不想将其设为默认值,请像这样传递它

    export const liab_config = () => {
      return axios.get(`${config.server_url}/fetch_config_liab`);
    }
    

    const liab_config = () => {
      return axios.get(`${config.server_url}/fetch_config_liab`);
    }
    
    export { liab_config };
    

    并像访问它一样

    import {liab_config} from './utils/kc-adapter'
    

    【讨论】: