ctx.end()和next()有什么区别?

时间:2017-03-06 13:22:32

标签: hook loopbackjs connector

我正试图找出 connector hooks of loopbacknext()ctx.end()之间的区别。

此外,为什么ctx.end()函数不能用于其他钩子?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

因为end函数未定义,它们是相同的。

loopback datasource juggler中有一段代码:

if (context.end === undefined) {
    context.end = callback;
  }

您可以在this line

上查看

所以它与你使用的那个相同。

答案 1 :(得分:0)

挖了一会儿后:

  • 首先,next()和ctx.end()共享相同的签名

  • 如果几个观察者绑定到连接器,则会一个接一个地调用它们(按绑定顺序)。

    • 调用next()调用下一个观察者
    • 调用ctx.end()结束"关闭"事件

示例-1(咖啡):

connectorName.connector.observe 'after execute', (ctx, next) ->
    console.log "hook1", new Date()
    wait(3000)
    ctx.end null, ctx, ctx.res.body
connectorName.connector.observe 'after execute', (ctx, next) ->
    console.log "hook2", new Date()
    wait(3000)
    next()

示例-2(咖啡):

connectorName.connector.observe 'after execute', (ctx, next) ->
    console.log "hook1", new Date()
    wait(3000);
    next null, ctx, ctx.res.body
connectorName.connector.observe 'after execute', (ctx, next) ->
    console.log "hook2", new Date()
    wait(3000)
    next()

在第一个例子中,永远不会调用第二个钩子。在第二种情况下,它通常被称为。

pgConnector.connector.observe 'after execute', (ctx, next) ->
    console.log "hook2", new Date()
    wait(3000);
    ctx.end(null, ctx.res)

pgConnector.connector.observe 'after execute', (ctx, next) ->
    console.log "hook3", new Date()
    wait(3000);
    next()

与数据库连接器相同。