我正在尝试编写一个简单的Swagger API,它允许我按需同步几个系统。同步是一种方式,因此基本上最终目标是向两个系统发送请求,查看原点上的新内容/更改/删除内容,然后更新目标。我一直在尝试使用node.js而不是Java来做这个,我更习惯,作为一种学习经验,但由于异步性质,我真的很难找出一个关键问题。
作为测试,我在IntelliJ上构建了一个简单的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);
});
我在控制台中得到的是
res out [object Promise] 而且反应当然是空的。
我做错了什么?我已经玩了一个星期了一周,尝试了各种方法,但我一直得到类似的结果。我显然错过了一些东西,并希望得到一些帮助。 谢谢!
答案 0 :(得分:1)
对象为空,因为它是在解析Promise之前写在控制台上的。你必须等到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);
});
});
答案 1 :(得分:0)
由于您使用的是async/await
方法,所以您只需在await
之前放置getit.dorequest();
所以这一行看起来像var ret = await getit.dorequest();