Node testing.test不是一个函数

时间:2017-06-28 18:39:29

标签: javascript node.js promise

我试图在另一个文件中调用一个函数,但无论我做什么,它都无法识别该函数。我得到了

  

uncaughtException:testing.test不是函数

//testing.js
module.exports = function(){
    return{
        "test" : function(){
            return new Promise(function (resolve, reject) {

            console.log('worked!')
                resolve(resolve({'data': "success"}))
            })
        }
    }
}

然后在任何其他文件中:

//other file
var testing = require("testing.js");
testing.test().then(function(data){
   console.log(data) 
})

我知道目录是正确的,我的IDE甚至表明我试图调用的是一个函数。我哪里出错了?

2 个答案:

答案 0 :(得分:1)

您的变量testing是一个函数(即您导出的内容)。您必须调用它才能获得所需的对象。

//other file
var testing = require("testing.js");
testing().test().then(function(data){    // added parens after testing()
   console.log(data) 
})

或者,将导出更改为直接导出对象,这样您就不必先调用函数来获取对象:

//testing.js
module.exports = {
    "test" : function(){
        return new Promise(function (resolve, reject) {

        console.log('worked!')
            resolve(resolve({'data': "success"}))
        })
    }
}

// then, this will work because testing is the actual object
var testing = require("testing.js");
testing.test().then(function(data){
   console.log(data) 
})

选择这两个选项中的一个或另一个。保持export作为函数允许您每次调用函数时获取新对象(如调用构造函数或工厂函数)。直接导出对象允许所有用户或您的模块访问同一对象。那么,走哪条路最终取决于您想要的设计类型。您只需要确保调用者和被调用者协同工作以适当地使用导出的值。

答案 1 :(得分:0)

testing.js更改为以下内容:

module.exports = {
    "test" : function() {
        return new Promise(function (resolve, reject) {

            console.log('worked!')
            resolve(resolve({'data': "success"}))
        })
    }
}

现在正在导出一个名为test的属性的对象,因此您可以按照预期的方式在其他文件中使用它: