【发布时间】:2015-08-08 17:01:34
【问题描述】:
我尝试了以下几种组合都没有效果。我只是想暂停执行并在准备好后返回路由器功能,然后释放响应。这可能吗?
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;
【问题讨论】:
-
你正在产生 request() 的返回,而不是
body在其中返回。 -
我在这里没有看到任何简单而干净的方式来使用 yield (描述了丑陋的复杂方式 here)。在 ES7 之前,Promise 可能是您需要的解决方案。
-
如果您只想返回 JSON,只需将
res.render放入request回调。你不需要产生任何东西,除非你有更高层次的最终目标,让事件循环处理它。 -
您可以像这样使用生成器:jsfiddle.net/oybcq94g,但这可能会破坏您想要完成的目标。
标签: javascript node.js yield