Utils
Packhouse Utils
Utils是Packhouse內部的函數組,有許多功能都來自於Utils的建構,包括Tool ID、Mold Verify等。
How To Use
Core
const Packhouse = require('packhouse')
const packhouse = new Packhouse()
packhosue.utils === Packhouse.utils // true
Tool
const tool = {
myTool: {
install({ store, utils }) {
store.id = utils.generateId()
store.uuid = utils.generateId
},
handler(self) {
console.log(self.store.id)
console.log(self.store.uuid())
}
}
}
Mold
const molds = {
uuid(value, { utils }) {
return utils.generateId()
}
}
Methods
getType
能比typeof
獲取更多的型態,沒在下列名單內的揭回傳typeof
的型態:
packhouse.utils.getType([]) // array
packhouse.utils.getType(NaN) // NaN
packhouse.utils.getType(null) // empty
packhouse.utils.getType(undefined) // empty
packhouse.utils.getType(/test/) // regexp
packhouse.utils.getType(new Promise(() => {})) // promise
packhouse.utils.getType(Buffer.from('123')) // buffer
packhouse.utils.getType(new Error()) // error
verify
一個簡單的驗證方法,並回傳新的物件。
verify
驗證的type
對象是多個型態,而支援的類型請參閱getType。
let options = {
a: 5,
b: []
}
let data = packhouse.utils.verify(options, {
// [required, allow types, default value]
a: [true, ['number']],
b: [true, ['array']],
c: [false, ['number'], 0]
})
console.log(data.a) // 5
console.log(data.c) // 0
generateId
仿uuid
建立,回傳一個隨機uuid
,但這並不是標準的uuid
演算法。
console.log(typeof packhouse.utils.generateId()) // string
但這不代表你無法使用uuid演算法:
let uuid = require('uuid/v4')
let packhouse = require('packhouse')
packhouse.utils.generateId = uuid
peel
針對物件深度取值,可以參考可選鍊。
let a = {
b: {
c: {
d: 5
}
}
}
console.log(packhouse.utils.peel(a, 'b.c.d')) // 5
console.log(packhouse.utils.peel(a, 'b.c.e')) // undefined
loader
返回一個Promise,第一次執行後會執行程序,但後續的呼叫皆回傳第一次呼叫的結果。
loader
的存在目的很簡單,在Tool Install的週期時,有時會存在需非同步請求才能獲得的資料,但該週期又不支援非同步運算,因此你可以藉由loader
進行包裹來達成初步的Cache。
更進階的快取應用可以參照Order。
let loader = packhouse.utils.loader((resolve, reject) => {
setTimeout(() => {
resolve('hello')
}, 1000)
})
loader().then(result => {
// 等待一秒才執行
console.log(result) // hello
loader().then(result => {
// 不需等待
console.log(result) // hello
})
})
Last updated
Was this helpful?