Javascript 使用回调函数导入模块
在main.js中,我有一个块,我可以将其分离到自己的模块中,该模块在api调用后为用户设置时区,并且无论ajax调用(成功或失败)如何,我都会初始化我的Vue实例 main.js: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
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',{
…返回是关键