0
当我第一次导入模块导出的函数是不确定的。 在例外情况下定义模块。
为什么没有定义!?!?
场景:
主文件
import { UserClass } from './user';
import { query, Client } from 'faunadb';
import { FaunaClass } from '../class';
console.log('init', typeof UserClass, typeof FaunaClass, typeof query);
export function initialise (client : Client) {
return new Promise((resolve, reject) => {
const CLASSES : (typeof FaunaClass)[] = [
UserClass
];
let count = 0;
const total = CLASSES.length;
console.log('classes', CLASSES);
CLASSES.forEach(cl =>
client.query(query.CreateClass({ name: cl.className }))
.then(checkDone)
.catch(reject));
function checkDone() {
count += 1;
if (total === count) {
resolve();
}
}
})
.catch(e => {
console.log('on catch', UserClass);
console.log(e.message);
});
}
,你可以看到有这个函数里面几个控制台日志。上karma start
的输出是:
PhantomJS 2.1.1 (Windows 8 0.0.0) LOG: 'init', 'undefined', 'undefined', 'object'
PhantomJS 2.1.1 (Windows 8 0.0.0) LOG: 'classes', [undefined]
PhantomJS 2.1.1 (Windows 8 0.0.0) LOG: 'on catch', function UserClass() { ... }
PhantomJS 2.1.1 (Windows 8 0.0.0) LOG: 'undefined is not an object (evaluating 'cl.className')'
PhantomJS 2.1.1 (Windows 8 0.0.0): Executed 1 of 1 SUCCESS (0.933 secs/0.928 secs)
UserClass.ts:
import { FaunaClass } from '../class';
export class UserClass extends FaunaClass {
static className = 'users';
}
**配置文件:**
karma.conf.js
const webpackConfig = require('./webpack.config');
const webpack = require('webpack');
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['mocha', 'chai', 'sinon'],
files: [
'src/**/*.spec.ts'
],
preprocessors: {
'**/*.ts': ['webpack', 'sourcemap']
},
webpack: {
module: webpackConfig.module,
resolve: webpackConfig.resolve,
devtool: 'inline-source-map'
},
// Webpack please don't spam the console when running in karma!
webpackServer: { noInfo: true },
reporters: ['progress'],
colors: true,
autoWatch: true,
logLevel: config.LOG_INFO,
browsers: ['PhantomJS'],
singleRun: false,
concurrency: 'Infinity'
});
};
的WebPack配置:
var path = require('path');
module.exports = {
entry: './handler.ts',
target: 'node',
module: {
loaders: [
{
test: /\.tsx?$/,
loaders: ['babel-loader', 'ts-loader'],
exclude: [/node_modules/]
},
{ test: /\.json$/, loader: 'json-loader' },
]
},
resolve: {
extensions: ['.ts', '.js', '.tsx', '.jsx']
},
output: {
libraryTarget: 'commonjs',
path: path.join(__dirname, '.webpack'),
filename: 'handler.js'
}
};
因此,大家可以看到UserClass
的日志记录在一开始是不确定的,当有异常的承诺中抛出,类成为定义。
我有一种感觉,由于某种原因,它正在执行代码之前UserClass
已被导出,这导致它在那一刻未定义。
无论是我的配置文件或完全损坏。