如何导出一个在节点的其他地方重用的promise

时间:2016-05-25 15:59:48

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

在邮递员中我收到错误:TypeError:ClientPromise.then不是函数。

*auth.js*

const Client = require("@x/nr");

module.exports = {
  ClientPromise: function(options) {
    return Client.authenticate(options); <--- (this returns a promise)
  }
}

这是我想从auth.js

中调用诺言的地方
*API.js*
var ClientPromise = require('../config/auth').ClientPromise

module.exports = {
  findOneClientProblem: function(req, res) {
    ClientPromise.then(function (client) {
      const Problem = client.Problem;
      return Problem.findOne(req.params.radarProblemID)
    }).then(function (result){
      return res.json(result)
    });
  }
}

当我将所有内容都放在这样的文件中时,它会起作用。

const Client = require("@x/nr");

const ClientPromise = Client.authenticate(options); <--- (this returns a promise)

module.exports = {
  findOneClientProblem: function(req, res) {
    ClientPromise.then(function (client) {
      const Problem = client.Problem;
      return Problem.findOne(req.params.radarProblemID)
    }).then(function (result){
      return res.json(result)
    });
  }
}

1 个答案:

答案 0 :(得分:2)

在API.js中,您必须实际调用ClientPromise()函数。您只是获取对该函数的引用,但实际上并未调用它,因此您没有承诺。

您的变量ClientPromise只包含对函数本身的引用。要执行该功能,您需要调用它:

ClientPromise(options).then(...)

以下是上下文中的变化:

// *API.js*
var ClientPromise = require('../config/auth').ClientPromise

module.exports = {
  findOneClientProblem: function(req, res) {
    ClientPromise(/* put options here */).then(function (client) {
      const Problem = client.Problem;
      return Problem.findOne(req.params.radarProblemID)
    }).then(function (result){
      return res.json(result)
    });
  }
}