异步功能在全局环境中不起作用

时间:2017-11-09 07:12:26

标签: javascript node.js express es6-promise es6-modules

我在全局环境中创建了一组异步函数。我想在所有模块中重用异步函数。当我在其他模块中调用重用异步函数时,它返回undefined。

全球

module.exports = ((global) => {
   return {
     async funcA(){
       return Promise.resolve();
     },
     async funcB(){
       return Promise.resolve();
     }
   }
})

端点

module.exports = ((global) => {
   return async(req, res, next) => {
     var getA = await global.funcA(); // Undefined
   };
});

路线

import global from './global';

console.log(global); // all the scripts
console.log(global.funcA); // Undefined

let endpoint = require('./endpoint')(global);


api.get('/test', endpoint);

1 个答案:

答案 0 :(得分:2)

首先,您不应该使用术语全局,因为Node.js已经使用过它。

无论如何,您似乎正在尝试从名为全局的文件中导出某些功能,然后您可以在整个应用程序中导入和使用这些功能。

<强> GlobalFuncs

您只需返回一个承诺就不需要导出异步函数。您也不需要将全局作为参数的函数。

所以你可以导出一个包含两个函数的对象:

module.exports = {
  funcA() {
    return Promise.resolve('Value A')
  },
  funcB() {
    return Promise.resolve('Value B')
  }
}

<强>端点

您可以使用等待关键字来获取异步功能:

const globalFuncs = require('./global-funcs')

module.exports = async (req, res) => {
  let getA = await globalFuncs.funcA()

  // Send result as response (amend as necessary)
  res.send(getA)
}

<强>路线

在这里,您只需导入端点功能并在路线中使用它:

const endpoint = require('./endpoint')

api.get('/test', endpoint)