Node testing.test не является функцией

1

Я пытаюсь вызвать функцию в другом файле, но независимо от того, что я делаю, она не распознает эту функцию. я получил

uncaughtException: test.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 даже показывает, что то, что я пытаюсь вызвать, является функцией. Где я неправ?

Теги:
promise

2 ответа

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 как функции позволяет вам получать новый объект (например, вызов конструктора или фабричной функции) при каждом вызове функции. Экспортирование объекта напрямую позволяет всем пользователям или вашему модулю иметь доступ к одному и тому же объекту. Итак, какой путь в конечном итоге зависит от того, какой тип дизайна вам нужен. Вам просто нужно убедиться, что вызывающий и вызывающий выступают совместно, чтобы использовать экспортированную стоимость соответствующим образом.

  • 0
    Волшебники говорили. Спасибо :) сработало!
0

Измените testing.js на следующее:

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

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

Теперь объект с свойством, называемым test, экспортируется, поэтому вы можете использовать его так, как вы планировали в другом файле:

  • 1
    Что ты изменил и почему?
  • 0
    Теперь объект со свойством test называется экспортируемым, поэтому вы можете использовать его так, как вы предполагали в другом файле.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню