我试图在另一个文件中调用一个函数,但无论我做什么,它都无法识别该函数。我得到了
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甚至表明我试图调用的是一个函数。我哪里出错了?
答案 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
的属性的对象,因此您可以按照预期的方式在其他文件中使用它: