【问题标题】:Simple yield from ES6 generator when library uses callback当库使用回调时,来自 ES6 生成器的简单收益
【发布时间】:2016-06-24 17:27:41
【问题描述】:

考虑这个使用异步请求的生成器(即:superagent):

static * findOne (model, id) {
  const url = [this.host, model].join('/')
  let res
  yield request
    .get(url)
    .end((err, resp) => {
      res = resp
    })
  return res
}

这感觉很笨拙……设置 res,然后在异步操作后更新它的值。有没有更清洁、更严格的方法来做到这一点?

我知道我可以使用一个 Promise 并产生它……但似乎没有增加价值,只是意味着我有更多的代码和嵌套在 Promise 函数参数中

我知道我不能在 end() 可链接的 ...

接受建议...

【问题讨论】:

  • 你必须使用超级代理吗?生成器要插入什么框架?
  • .end(…) 返回什么(可屈服的)?看起来已经很像一个承诺了。
  • 我不必使用 superagent,但我更喜欢它的 api 的简单性、一致性和简洁性。返回产生的值是一个http响应对象

标签: javascript ecmascript-6 generator


【解决方案1】:

对于那些发现这个问题的人,看起来你可以简单地这样做:

  static * findMany (model, query) {
    const url = ['http://localhost:3333', model].join('/')
    yield request
      .get(url)
      .end()
  }

...因为 superagent 已经支持 yield 并返回响应对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 2013-07-03
    • 2014-06-17
    • 2018-08-21
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    相关资源
    最近更新 更多