如何取消sails.js电梯钩

我需要在提升我的Sails.js应用程序时使用promise来执行某些初始化任务。

如果这些任务以任何方式失败,应用程序不应该继续解除,并且必须logging一个错误。 另外,这些任务可能无法在有限的预定义时间内完成(请参阅钩子定义 )。

但是,钩子系统只允许在钩子成功完成时调用cb(),而且似乎没有任何方法可以让应用程序:

  • 崩溃,没有超时( 挂钩:X:错误 )
  • 无法继续,直到以前的钩子已经成功或失败

有没有办法做到这一点?

首先,如果初始化任务是特定于您的应用程序的,那么您可以使用bootstrap而不是钩子。 调用bootstrapcallback函数作为参数会导致Sails退出。

如果你肯定需要使用一个钩子,你可以强制Sails以同样的方式退出 – 使用任何非null参数在钩子的initialize方法内调用callback将会表示失败,并导致Sails退出。 一般情况下Node应用程序就是这种情况:任何时候您都需要调用一个callback函数,传递一个非空值作为第一个参数会发出错误信号。

所以,如果你的钩子的initialize启动了你需要运行的任务,并且在它们全部完成之前不调用cb() ,并且在任务失败的时候调用cb(<some error>) ,那么你将有一个情况,Sails在挂钩完成之前将不会加载,如果挂钩不能完成任务,则退出。