Step
Packhouse Step
How To Use
Packhouse本體只是個函數設計模型,而Step負責建構middleware與流程設計使得Packhouse具有實際建構服務的能力。
Step是一個Plugin,使用前必須先引用:
let Step = require('packhouse/plugins/Step')
let Packhouse = require('packhouse')
let packhouse = new Packhouse()
packhouse.plugin(Step)Flow
整個flow是經由下列控制:
next下一步。exit跳出至output,可以攜帶一個參數,會傳遞至output的message。fail跳出至output,但fail為true,可以攜帶一個參數,會傳遞至output的message。
let step = packhouse.step({
timeout: 25000, // ms
create: function(self, { exit, fail }) {
self.result = 0
},
middle: function(self, { exit, fail }) {
if (typeof self.result !== 'number') {
exit()
}
},
// required
output(self, { timeout, history, fail, message }, done, error) {
done(self.result)
},
// required
template: [
function add(self, next, { exit, fail }) {
self.result = 10
next()
},
function double(self, next) {
self.result *= 2
next()
}
]
})
step.then((result) => {
console.log(result) // 20
})上面的程式的運作如下:

Create
第一次執行Step時觸發的方法,必須是同步的函數,可以執行跳出事件。
Middle
create -> template -> output 行為之間都會出發middle,可以作為跳出判定層,必須是同步函數。
Output
接收所有運算結果的地方,為非同步函數,最後兩個參數為done與error,決定整個Step為reslove還是reject。
Timeout
指定運行的毫秒數,如果省略則無限制,當運行時間超過時會無條件呼叫output,且timeout為true。
Fail
當呼叫output的對象是fail時為true。
Message
當fail或exit有攜帶參數時會帶入的值。
Template
運作的過程,與async waterfall雷同,會隨著陣列的順序依序宣告,執行到最末端後執行output,也允許執行跳出整個流程。
History
記錄整個執行過程的物件,可輸出JSON Log。
Profile
Key
Value
fail
是否為Fail
message
同output message
timeout
是否為timeout
startTime
起始時間
finishTime
結束時間
totalTime
總運行時間(ms)
Template
整體運作的細部資料,除非不得已,否則我們建議使用ToJSON來檢視整個過程。
Is Done
如果有對Template的函數進行命名,可以使用isDone來驗證是否有運行該函數。
To JSON
將細部運作資料轉換成JSON可存放資料。
我們提供了簡易的JSON Template檢視工具來協助你開發:
Last updated
Was this helpful?