Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回导出模块的最佳方法_Javascript_Node.js - Fatal编程技术网

Javascript 返回导出模块的最佳方法

Javascript 返回导出模块的最佳方法,javascript,node.js,Javascript,Node.js,在我的学习过程中,我已经开始研究javaScript/Node的模块。让我困惑的是,当完成模块内功能的时间未知时,如何从模块返回信息 这将如预期的那样返回: controller.js const myModule = require('./myModule'); var myWord = myModule.myExp(); console.log(myWord); //returns "Hello World" const myModule = require('./myModule');

在我的学习过程中,我已经开始研究javaScript/Node的模块。让我困惑的是,当完成模块内功能的时间未知时,如何从模块返回信息

这将如预期的那样返回:

controller.js

const myModule = require('./myModule');
var myWord = myModule.myExp();
console.log(myWord); //returns "Hello World"
const myModule = require('./myModule');
var myWord = myModule.myExp();
console.log(myWord); //returns undefined
const myModule = require('./myModule');

async function findMyWord() {
  const myWord = await myModule.myExp();
  console.log('My word is:', myWord);
}

findMyWord();
myModule.js

module.exports = {
    myExp: function(){
        return mytimeOut();
    }
}

function mytimeOut(){
 var myWord = "Hello World";
 return myWord;
}
module.exports = {
    myExp: function(){
        return mytimeOut();
    }
}

function mytimeOut(){
    setTimeout(() => {
        myWord = "Hello World";
        return myWord;

    }, 5000);
}
function myTimeout() {
  // Create a promise
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("Hello World"); // resove the promise after those 5 seconds
    }, 5000);
  })
}

module.exports = {
  myExp: function() {
    return myTimeout();
  }
};
'use strict';

module.exports = {
  myExp: function() {
    return mytimeout();
  }
};

function mytimeout() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Hello World');
    }, 1000);
  }); 
}
我似乎无法理解的是,当返回所需结果的时间不确定时,返回myModule的最佳方式

如何让控制器在下面的示例中显示“Hello World”而不是“Undefined”。我读过关于回调、承诺、异步/等待的文章,但没有任何过多的复杂性,我似乎找不到一个简单的解决方案

controller.js

const myModule = require('./myModule');
var myWord = myModule.myExp();
console.log(myWord); //returns "Hello World"
const myModule = require('./myModule');
var myWord = myModule.myExp();
console.log(myWord); //returns undefined
const myModule = require('./myModule');

async function findMyWord() {
  const myWord = await myModule.myExp();
  console.log('My word is:', myWord);
}

findMyWord();
myModule.js

module.exports = {
    myExp: function(){
        return mytimeOut();
    }
}

function mytimeOut(){
 var myWord = "Hello World";
 return myWord;
}
module.exports = {
    myExp: function(){
        return mytimeOut();
    }
}

function mytimeOut(){
    setTimeout(() => {
        myWord = "Hello World";
        return myWord;

    }, 5000);
}
function myTimeout() {
  // Create a promise
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("Hello World"); // resove the promise after those 5 seconds
    }, 5000);
  })
}

module.exports = {
  myExp: function() {
    return myTimeout();
  }
};
'use strict';

module.exports = {
  myExp: function() {
    return mytimeout();
  }
};

function mytimeout() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Hello World');
    }, 1000);
  }); 
}
使用异步/等待:

  // myModule.js

  function mytimeOut() { 
    return new Promise(resolve => 
      setTimeout(() => resolve('Hello World'), 5000)
    )
  }

  // controller.js

  async function init() {
    var myWord = await myModule.myExp()
    console.log(myWord)
  }
  init()

这是一个使用async/await的工作副本

const导出={
myExp:function(){
返回mytimeOut();
}
}
函数mytimeOut(){
返回新承诺((解决)=>{
设置超时(()=>{
const myWord=“你好,世界”;
解决(myWord);
}, 5000);
});
}
(异步()=>{
const output=wait exports.myExp();
document.getElementById('output')。textContent=output;
})();

您可以使用async/await实现这一点

文件:myModule.js

module.exports = {
    myExp: function(){
        return mytimeOut();
    }
}

function mytimeOut(){
 var myWord = "Hello World";
 return myWord;
}
module.exports = {
    myExp: function(){
        return mytimeOut();
    }
}

function mytimeOut(){
    setTimeout(() => {
        myWord = "Hello World";
        return myWord;

    }, 5000);
}
function myTimeout() {
  // Create a promise
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("Hello World"); // resove the promise after those 5 seconds
    }, 5000);
  })
}

module.exports = {
  myExp: function() {
    return myTimeout();
  }
};
'use strict';

module.exports = {
  myExp: function() {
    return mytimeout();
  }
};

function mytimeout() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Hello World');
    }, 1000);
  }); 
}
文件:controller.js

const myModule = require('./myModule');
var myWord = myModule.myExp();
console.log(myWord); //returns "Hello World"
const myModule = require('./myModule');
var myWord = myModule.myExp();
console.log(myWord); //returns undefined
const myModule = require('./myModule');

async function findMyWord() {
  const myWord = await myModule.myExp();
  console.log('My word is:', myWord);
}

findMyWord();

我将所有内容包装在一个
async
函数中,因为否则您将收到
语法错误:wait仅在async
错误中有效。

您需要使用Promise,因为setTimeout不会返回可以等待的承诺

文件:myModule.js

module.exports = {
    myExp: function(){
        return mytimeOut();
    }
}

function mytimeOut(){
 var myWord = "Hello World";
 return myWord;
}
module.exports = {
    myExp: function(){
        return mytimeOut();
    }
}

function mytimeOut(){
    setTimeout(() => {
        myWord = "Hello World";
        return myWord;

    }, 5000);
}
function myTimeout() {
  // Create a promise
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("Hello World"); // resove the promise after those 5 seconds
    }, 5000);
  })
}

module.exports = {
  myExp: function() {
    return myTimeout();
  }
};
'use strict';

module.exports = {
  myExp: function() {
    return mytimeout();
  }
};

function mytimeout() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Hello World');
    }, 1000);
  }); 
}
文件:controller.js(.then()


您使用它的方式可能与使用任何异步函数的方式相同。只需导出函数并使用任何异步编程技术调用它,例如:错误优先回调、承诺、
async
函数。可能重复谢谢。这可能是重复的。我正在阅读您建议的副本。
mytimeOut
不需要是
async
语法错误:wait仅在async中有效function@TerenceE.Uttleyyes根据您在controller.js中调用它的方式,您可能需要将它包装成一个
async