2017-07-26 264 views
1

我再次破坏b *** s ... 我很抱歉不得不回到你们,但我觉得网上提供的信息很混乱,似乎无法找到适合我的问题的答案。 所以如果你们中的一个向导/神的帮助我,我会非常感激。NodeJS异步/等待输出变量

我试图导出一个变量,从承诺产生一个不同的模块。 这里是我的代码:

主要:

//app.js <--- This is where I need the variable exported. 

var sp1 = require('./module'); 

var somePromise2 = new Promise((resolve, reject) => { 
    resolve('Hey! It worked the second time!'); 
}); 


async function exec() { 
    const message1 = await sp1.msg 
    const message2 = await somePromise2 
    console.log('Success', message1, message2); 
} 

exec() 

,并承诺该模块:

//module.js 

var somePromise1 = new Promise((resolve, reject) => { 
    var msg = ''; 
    resolve(msg = 'Hey! It worked!'); 
}); 

module.exports = { 
    somePromise1, 
} 

正如你可以看到somePromise1,其实是一样的somePromise2但在不同的模块。事情是,我显然似乎无法得到要导出的味精变量,它会产生一个未定义的(如果我在本地执行所有操作:在同一个文件中,它可以毫无用处地工作)。

在此先感谢您的帮助,并提前对不起,如果您发现这是一个现有问题的副本... I'crawled SO自昨天起回答并移动代码,但似乎没有任何适用。 。

+1

您没有导出'msg'变量。你只是出口'somePromise1'的承诺。 –

回答

2

你在导入一个错误,并在使用该承诺的错误:

//app.js <--- This is where I need the variable exported. 

var sp1 = require('./module').somePromise1; 

var somePromise2 = new Promise((resolve, reject) => { 
    resolve('Hey! It worked the second time!'); 
}); 


async function exec() { 
    const message1 = await sp1; 
    const message2 = await somePromise2; 
    console.log('Success', message1, message2); 
} 

exec() 
+0

它的工作!可以帮助我多一点与谁的?我的意思是,为什么我需要添加'.somePromise1'而不是只指定'./module'? – Ardzii

+1

对不起,非常感谢! (btw) – Ardzii

+1

@Ardzii我建议你阅读一篇关于导入/导出的好文章:https://www.sitepoint.com/understanding-module-exports-exports-node-js/ –