Meteor导入要在方法调用中使用的异步函数



此Meteor应用程序在尝试调用保存在常量变量"中的导出异步函数时给出错误TypeError: vinXXX is not a function;vinXXX";从方法follder中导入的sibing文件夹中的方法调用中。知道为什么以及如何修复它吗?感谢

//imports/api/vehicles/methods.js
import { vinXXX } from './vinXXX.js'
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU');  // CAR HISTORY
}
});

//imports/api/vehicles/vinXXX.js
const vinXXX = async (plate, state) => {...}
module.exports = vinXXX;

因此,基本上您已经获得了混合了commonJS导出语法的ES模块导入语法。由于Meteor传输代码的方式,这两者可能会混合在一起,但你必须了解它们是如何工作的,这样你才能存储和检索数据,以便它们协同工作。

要使其使用混合语法,您的导入需要更改为ES模块默认导入语法,或者您需要更改导出以在导出的对象上具有命名属性。

将导出更改为具有命名导入属性的对象

//imports/api/vehicles/methods.js
import vinXXX from './vinXXX.js'
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU');  // CAR HISTORY
}
});
//imports/api/vehicles/vinXXX.js
const vinXXX = async (plate, state) => {...}
module.exports = { vinXXX };

将导入更改为默认ES模块导入

//imports/api/vehicles/methods.js
import { vinXXX } from './vinXXX.js'
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU');  // CAR HISTORY
}
});

//imports/api/vehicles/vinXXX.js
const vinXXX = async (plate, state) => {...}
module.exports = vinXXX;

当然,您可以使用其中一种或另一种语法,而无需混合它们。

CommonJS默认导出

//imports/api/vehicles/methods.js
const vinXXX = require('./vinXXX.js')
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU');  // CAR HISTORY
}
});

//imports/api/vehicles/vinXXX.js
const vinXXX = async (plate, state) => {...}
module.exports = vinXXX;

CommonJs命名为导出

//imports/api/vehicles/methods.js
const { vinXXX } = require('./vinXXX.js')
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU');  // CAR HISTORY
}
});

//imports/api/vehicles/vinXXX.js
const vinXXX = async (plate, state) => {...}
module.exports = { vinXXX };

ES模块默认语法

//imports/api/vehicles/methods.js
import vinXXX from './vinXXX.js'
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU');  // CAR HISTORY
}
});

//imports/api/vehicles/vinXXX.js
export default async (plate, state) => {...}

ES模块命名为导出

//imports/api/vehicles/methods.js
import { vinXXX } from './vinXXX.js'
Meteor.methods({
'extractData': function (plate) {
console.log('method called: ', plate)
vinXXX(plate, 'UUU');  // CAR HISTORY
}
});

//imports/api/vehicles/vinXXX.js
export const vinXXX = async (plate, state) => {...}

您将导出设置为vinXXX本身,而不是包含它的对象。因此,您的导入需要为默认值:

import vinXXX from './vinXXX.js'

最新更新