【问题标题】:How to make yield work with this.req.on('data') without requiring more modules?如何在不需要更多模块的情况下使用 this.req.on('data') 使 yield 工作?
【发布时间】:2014-09-04 20:22:44
【问题描述】:

很明显,这里的原因是因为on('data') 的异步性质,以及使用yield 的组合,但是我怎样才能使它工作呢?我试过“thunkifying”_this.req.on,但无济于事。我仍然掌握了生成器、yield 和 thunk 的窍门,但我在这里有点难过。

有没有其他聪明的解决方案不需要其他模块依赖

var thunkify = require('thunkify');
var request = thunkify(require('request'));

//...

if (['GET', 'DELETE'].indexOf(_this.req.method) === -1) {
        _this.req.on('data', function(chunk) {
            options.json = chunk.toString();
        });
    }

//...

var resp = yield request(options);
_this.body = resp[0].body;

【问题讨论】:

  • 你能展示你的整个代码吗?我想我可以回答你的问题,但我不确定你在做什么。

标签: javascript node.js generator yield co


【解决方案1】:

我能够通过使用co-body 模块完成这项工作。这是一个例子:

var thunkify = require('thunkify');
var request = thunkify(require('request'));
var parse = require('co-body');

//...

if (['GET', 'DELETE'].indexOf(_this.req.method) === -1) {
        options.json = yield parse.json(_this.req);
    }

//...

var resp = yield request(options);
_this.body = resp[0].body;

但是,我不喜欢每次我必须做某事时都需要另一个模块的事实。谁有更好的?

【讨论】:

  • 这是另一个问题还是一个答案?
  • 我想我自己做更多的挖掘,因为还没有人回复.. 虽然我不喜欢我的答案,所以我正在等待是否有人有更好的答案。跨度>
  • 这是你应该这样做的方式。
猜你喜欢
  • 1970-01-01
  • 2015-04-14
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 2021-10-17
相关资源
最近更新 更多