在promise

时间:2017-08-23 07:18:58

标签: javascript node.js express seneca

我正在研究合并swagger文件。我想传递像

这样的数组
[ 
  { method: '1', path: '/signIn', handler: funation() {return "abcd"},
  { method: '2', path: '/signOut', handler: funation() {return "123"},
]

我根据自己的需要得到了结果,但是没有传递给module.exports,我在需要这个文件后将其检入另一个文件控制台, 我的代码就像

jsonResolve(root, options).then(function (results) {
  const result = results.resolved.paths;
  // console.log(result);
  for (key in result) {
    // console.log('keys', key);
    const apiRoute = key;
    const apiDescription = result[key];
    let controller = apiDescription['x-swagger-router-controller'];
    for (method in apiDescription) {
      // console.log("methods", method);
      let newRoute = {};
      if (method !== 'x-swagger-router-controller') {
        let operationId1 = apiDescription[method].operationId;

        newRoute = {
          method: method,
          path: apiRoute,
          handler: controllers[controller][operationId1](),
        };
        exoprtData.push(newRoute);
      }
    }
  }
  return exoprtData;
})
.then((result) => {
  console.log(result);
  module.exports = result;
})

我最后检查了结果。但没有传递给module.exports

我的需要文件代码就像,

var ApiRoutes = require("./routes/api");
console.log("ApiRoutes", ApiRoutes);

在这里我得到的结果如控件

ApiRoutes {}

请帮我解决这个问题。提前致谢

1 个答案:

答案 0 :(得分:0)

Node.js期望同步加载任何模块 - 即。 必须在当前执行循环中分配给module.exports,否则模块的导出内容将成为默认的空对象。

您在解决承诺后分配给module.exports这不起作用 - 在解析promise时,Node.js已经完成加载模块并缓存导出的值(空对象)作为模块的内容。您现在无法通过分配module.exports来更改它。

要解决此问题,您必须:

  • 导出一个通过promise
  • 返回数组的函数
  • 以某种方式让它同步工作(取决于jsonResolve()做什么)
  • 将实际承诺分配给module.exports