对高级 Koa 功能感到困惑

Confused about advanced Koa functions

本文关键字:功能 高级 Koa      更新时间:2023-09-26

我有一个使用 Koa 生成器的项目,我对编写"控制器"感到沮丧。我寻找过示例,但实际上基于关键字的 Github 上没有很多结果,所以我怀疑我做错了什么。

我的应用使用 koa-router 将终结点路由到生成器。

那么控制器看起来像这样

export function* postEvent () {
  const self = this
  const user = yield User.findOne({slug: this.params.slug}).exec()
  if (user) {
    user.events.push({
      [ ... ]
    })
    yield user.save( (error, event) => {
      yield postBlacklist({
        [ ... ]
      })
      .then( event => {
        self.status = 200
        self.body = "Event created for: " + user.slug
      })
    })
  } else {
    [ ... ]
  }
}

如您所见,此生成器不起作用。我使用yield让应用程序等待user.save()完成。但我不能做yield postBlacklist()因为我已经"用完"了我的yield命令。如果我删除第二个yield,我会得到一个 404。

那么,我如何将一个承诺返回的东西嵌套在另一个这样的东西中呢?

不,您不能从回调中产生。但是为什么这不起作用呢?

export function* postEvent () {
  const user = yield User.findOne({slug: this.params.slug}).exec()
  if (user) {
    user.events.push({
      [ ... ]
    })
    // should return a promise in latest versions of mongoose.
    // Otherwise, write your own wrapper which does so.
    var event = yield user.save();  
    yield postBlacklist({
        [ ... ]
    })
    .then( event => {
      this.status = 200
      this.body = "Event created for: " + user.slug
    });
  } else {
    [ ... ]
  }
}