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

Meteor import async function to be used in a method call

此 Meteor 应用在​​尝试调用保存在常量变量“vinXXX”中的导出异步函数时给出错误 TypeError: vinXXX is not a function 从已导入到方法文件夹中的同级文件夹中的方法调用中。知道为什么以及如何解决它吗? 谢谢

//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 模块导入语法和 commonJS 导出语法的混合。由于 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;

名为 export 的 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'