2015-05-26 29 views
0

我已經嘗試了幾個下面的組合,沒有任何效果。我只是想暫停執行並在準備就緒時返回到路由器功能,然後釋放響應。這可能嗎?如何在javascript/node ....中執行簡單的yield?

var express = require('express'); 
var router = express.Router(); 
var request = require('request'); 

router.get('/', function(req, res, next) { 

    var result = getJson(); 

    res.render('index', { title: result}); 

}); 


function *getJson(){ 
    yield request('https://myjson.json', function (error, response, body){ 
     return body; 
    }); 
} 




module.exports = router; 
+0

你正在產生request()的返回,而不是'body'被返回的內部。 –

+1

我沒有看到任何簡單和乾淨的方式來使用yield這裏(醜陋的複雜方式描述[這裏](http://davidwalsh.name/async-generators))。承諾可能是你需要的解決方案,直到ES7。 –

+0

如果您只是希望將JSON發回,只需將'res.render'放入'request'回調中即可。你不需要產生任何東西,除非你有更高級的最終目標,讓事件循環來處理它。 – Tony

回答

0

你所尋找的是async/await,不yield。當您想枚舉時使用yield。你可以在Mozilla Developer Networkthis SO answer上閱讀更多關於它的信息。

async/await都是ECMAScript 7語言功能,所以它們在瀏覽器中本地不可用。您可以使用Traceur編譯器將ES7代碼轉換/編譯/轉換爲ES5代碼,但我沒有嘗試過。一個example can be found here

它可以使用generator S和yield以類似的方式,以async/awaitcheck out this article by Jake Archibald詳細。

+0

哦,垃圾它會是幾年,直到那是實施呢? – Exitos

+0

由於您正在使用NodeJS,因此您可能可以使用https://github.com/yortus/asyncawait。或者只是使用Traceur將ES7代碼編譯成今天可用的東西,這也適用於瀏覽器! – JimmyBoh

相關問題