2017-09-25 36 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();