【问题标题】:Meteor import async function to be used in a method call要在方法调用中使用的 Meteor 导入异步函数
【发布时间】:2021-06-18 15:38:22
【问题描述】:

此 Meteor 应用程序在尝试从已导入方法文件夹的同级文件夹中的方法调用中调用保存在 const 变量“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;

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    所以基本上你已经混合了 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;

    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) => {...}

    【讨论】:

      【解决方案2】:

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

      import vinXXX from './vinXXX.js'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-26
        • 2016-06-07
        • 2014-05-27
        相关资源
        最近更新 更多