我如何确保在响应传入的请求(Swagger / Express)之前已经返回一个承诺,

我正在尝试编写一个简单的Swagger API,可以让我根据需要同步一些系统。 同步是一种方式,所以基本上最终的目标是向两个系统发送一个请求,看看有什么新的/改变/删除的原点,然后更新目的地。 我一直在尝试使用node.js来代替Java,我习惯于这种学习方式,但是由于asynchronous性质,我真的很难找出一个关键问题。

作为一个testing,我在IntelliJ上构build了一个简单的Express node.js应用程序,在其中一条路线中,我调用了从另一个文件导出的函数,并尝试获取响应。 不幸的是,这不是很好。 我所做的是这样的:

getit.js – (这是Ron Swanson生成器得到一个报价)

const rp = require('request-promise'); async function dorequest() { const response = await rp(uri); return Promise.resolve(response); }; module.exports = {dorequest} 

在我这样做的路线中:

 var getit = require ('./getit.js'); /* GET users listing. */ router.get('/', function(req, res, next) { var ret = getit.dorequest(); res.send(ret); console.log('res out' + ret); }); 

我在控制台中得到的是

退出[对象Promise],响应当然是空的。

我究竟做错了什么? 我已经玩了一个星期了,尝试了各种方法,但我一直得到类似的结果。 我明显错过了一些东西,并希望得到一些帮助。 谢谢!

对象是空的,因为它是在Promiseparsing之前写在控制台上的。 你必须等到Promise解决,然后发回响应,所以试着改变你的代码是这样的:

 var getit = require ('./getit.js'); /* GET users listing. */ router.get('/', function(req, res, next) { getit.dorequest().then(function(data) { console.log('res out' + data); res.send(data); }); }); 

由于您使用的是async/await方法,所以您只需在getit.dorequest();之前放置await getit.dorequest();

所以这行看起来像var ret = await getit.dorequest();