从另一个文件要求后未定义module.exports函数

时间:2019-05-11 09:54:31

标签: javascript node.js

大家好,我是从nodejs开始的,我想我理解module.exports的工作原理,但是当在要求并在index.js入门文件中使用它之后,在另一个文件中使用相同的功能时,我首先得到的不是一个功能。我看到了一些类似的答案,但是使用了更复杂的代码,但我没有明白这就是为什么我在这里这么简单地要求它的原因。让我更详细地解释一下,如果它太基础了,就对不起。

我运行npm start并从index.js文件开始

Index.js

const { first } = require("./first");

first();

First.js

const { second } = require("./second");

function first(){
    
    return second();
}

module.exports = {
    first
}

Second.js

const { first } = require("./first");

function second(){
    return new Promise((resolve, reject)=>{
        setTimeout(()=>resolve(), 1500)
    })
    .then(()=> {
        first()
    })
    .catch(err => {
        // Here's the first is not a function
        console.log("Error here!!: ", err)
    })
}

module.exports = {
    second
}

第二个.js文件的捕获中引发了错误。它说:这里出错!:TypeError:首先不是函数

2 个答案:

答案 0 :(得分:0)

尝试这种方式

  

index.js

const  first  = require("./first");

first.first();
  

first.js

const  second  = require("./second");

module.exports.first=function(){
    /* logic or code */
    return second.second();
}
  

second.js

const  first  = require("./first");

module.exports.second=function(){ 
    return new Promise((resolve, reject)=>{
        setTimeout(()=>resolve(), 1500)
    })
    .then(()=> {
        first.first()
    })
    .catch(err => {
        // Here's the first is not a function
        console.log("Error here!!: ", err)
    })
}

答案 1 :(得分:0)

这对我有用,您需要在second.js中添加另一个anonnymus函数。

.then((good)=>{ ()=>first()}).catch(err=>{console.log(err)}) }

这就是您的代码所需要的。

function second(){
return new Promise((res,rej)=>{
    setTimeout(()=>{res(),1500})})
    .then(()=>{()=>first()})
    .catch(err=>{console.log(err)})}