Javascript 返回导出模块的最佳方法
在我的学习过程中,我已经开始研究javaScript/Node的模块。让我困惑的是,当完成模块内功能的时间未知时,如何从模块返回信息 这将如预期的那样返回: controller.jsJavascript 返回导出模块的最佳方法,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');
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