2017-09-25 120 views
1

我试图写一个简单的API扬鞭,让我同步了几个点播系统之前被退回。同步是一种方式,所以基本上最终目标是向两个系统发送请求,查看来源上的新增/更改/删除内容,然后更新目标。我一直在尝试使用node.js而不是Java,我更习惯于这种学习体验,但是由于异步性质,我真的很难找出一个关键问题。我如何确保承诺已响应传入的请求(扬鞭/快递)

作为一个测试,我构建了一个简单快捷的Node.js上的IntelliJ,其中的途径之一我打电话从不同的文件导出的函数,并试图获得响应回应用程序。不幸的是,这不太好。我所做的是这样的:

getit.js - (这正好给罗恩·斯旺森发生器获得报价)

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); 
 
});

我在控制台中看到什么是

水库出[对象无极] 和反应当然是空的。

我在做什么错?我已经玩了一个星期了,尝试了各种方法,但我一直在得到类似的结果。我明显错过了一些东西,并希望得到一些帮助。 谢谢!因为它是在控制台上写的承诺得到解决之前

回答

1

对象为空。你必须等到承诺得到解决,然后再发送回响应,从而试图改变这样的代码:

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); 
    }); 
}); 
+0

完美!最后我得到它的工作! – NadavM

0

由于您使用async/await方法中,所有你需要做的是getit.dorequest();

前放置 await

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