Javascript 使用回调函数导入模块

Javascript 使用回调函数导入模块,javascript,ecmascript-6,es6-promise,Javascript,Ecmascript 6,Es6 Promise,在main.js中,我有一个块,我可以将其分离到自己的模块中,该模块在api调用后为用户设置时区,并且无论ajax调用(成功或失败)如何,我都会初始化我的Vue实例 main.js: import * as moment from 'moment-timezone/moment-timezone'; moment.tz.setDefault("UTC"); window.Vue.prototype.moment = moment; let timezone = "UTC"; let userT

在main.js中,我有一个块,我可以将其分离到自己的模块中,该模块在api调用后为用户设置时区,并且无论ajax调用(成功或失败)如何,我都会初始化我的Vue实例

main.js:

import * as moment from 'moment-timezone/moment-timezone';
moment.tz.setDefault("UTC");
window.Vue.prototype.moment = moment;

let timezone = "UTC";
let userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;

axios.get('/api/timezone-data', {
    params: {
        timezone: userTimezone
    }
}).then(response => {
    // do other stuff
    initVue();
}).catch(error => {
    initVue()
});

// Separate until here into its own module

function initVue() {
   // initialises vue
}
我想了解如何将该块移动到其单独的文件中,并在它触发
initVue()
方法时以某种方式捕获它

比如,在我的main.js中:

require('./tz-settings').then(() => {
   console.log('initVue() is called')
})

或者更清楚地说

import tzSettings from './tz-settings';
tzSettings('initVueCalledInTzSettings', () => {
   initVue();

})

一种可能的解决办法:

基于initVue在main.js中的注释

当然,您也可以使用Promise
。最后

    }).then(response => {
        // do other stuff
    }).catch(error => {
        // handle the error in some way
    }).finally(initVue);
你会像这样使用它

import tzsettings from './tz-settings.js';

tzsettings(initVue).then(() => {
   console.log('initVue() is called')
})
import tzsettings from './tz-settings.js';

tzsettings().finally(initVue);

老实说,为什么不这样做呢

export default function() {
    moment.tz.setDefault("UTC");
    window.Vue.prototype.moment = moment;
    let timezone = "UTC";
    let userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
    return axios.get('/api/timezone-data', {
        params: {
            timezone: userTimezone
        }
    }).then(response => {
        // do other stuff
    });
};
像这样使用它

import tzsettings from './tz-settings.js';

tzsettings(initVue).then(() => {
   console.log('initVue() is called')
})
import tzsettings from './tz-settings.js';

tzsettings().finally(initVue);

为什么
tz settings
需要了解有关
initVue
的任何信息

如何从
tz settings
导出接受回调或返回承诺的函数?它可能看起来更干净,不需要您混合使用
import
语句和
require
语句。同样值得研究的是,您的设置是否支持Promissions上的方法。@Khauri如果您能在这方面帮助我,我会很高兴(即使只是一个伪示例)。此外,我还需要查找什么来了解“导入”和“需要”的差异,因为我对这些差异了解不多-甚至不知道如何搜索。搜索MDN导入和/或MDN导出以获取es6模块的文档我想你误解了我的问题:(我的问题是保留
initVue()
main.js中
并分离所有其他代码。通过回调或承诺,在my main.js中调用
initVue()
时捕获。那么
需要('./tz设置')。然后(()=>{console.log('initVue()被调用'))
是否调用initVue@sentyIt不起作用-它甚至不起作用,这是需要解释的伪代码。我只是想了解在ajax调用完成时(在单独的文件中),如何将此块移到main.js之外和main.js中在我的main.jsfair中捕捉到足够多的信息,我没有意识到initVue是在main.js编辑的答案中定义的。你是否
返回axios.get('/api/timezone data',{
…返回是关键