# Status

const alas = new Alas()
const status = alas.registerStatus('myFirstStatus', {
    states: {
        user: () => {
            return {
                name: 'james',
                age: 18
            }
        }
    },
    loaders: {
        async fetchUser(self, done, fail, { username }) {
            let user = await getUser(username)
            self.fetch('user').$init(user)
            done()
        }
    }
})

# Types

Status 本身就有 Type 的隱式處理,但 Loader 本身定義較為困難,以下是定義 Status Loader 的範例:

import { LoaderDone } from 'alas'
const status = alas.registerStatus('myFirstStatus', {
    states: {},
    loaders: {
        // 使用 LoaderDone 確定回傳值必須是數字
        async fetch(self, done: LoaderDone<number>, fail, { username }: { username: string }) {
            let user = await getUser(username)
            self.fetch('user').$init(user)
            done(1)
        }
    }
})

# Property

# loaders

獲取 Status 定義的加載方法。

  • type: { [key: loaders]: Loader }

# Methods

# on

監聽一個事件。

status.on = function(eventName: string, callback: EventCallback) => string
  • return: listener id

# once

監聽一個事件,但觸發一次即結束。

status.once = function(eventName: string, callback: EventCallback) => string
  • return: listener id

# off

關閉指定 Id 的監聽對象。

status.off = function(eventName: string, listenerId: string) => void

# set

設定一個狀態為指定的值。

status.set = function(stateName: string, value: { [key: string]: any }) => void

# fetch

獲取指定狀態。

status.fetch = function(stateName: string) => Object

# reset

重置指定狀態。

status.reset = function(stateName: string) => void

# resetAll

重置所有狀態。

status.resetAll = function() => void

# Events

提示

Status Event是屬於系統單方面發送,不存在 emit 方法。

# set

使用 set 時被觸發。

status.on('set', (statue: Status, context: { id: string }, data: { name: string, value: any }) => { ... })

# reset

使用 resetresetAll 時被觸發。

status.on('reset', (statue: Status, context: { id: string }, data: { name: string }) => { ... })

# fetch

使用 fetch 時被觸發。

status.on('fetch', (statue: Status, context: { id: string }, data: { name: string, result: any }) => { ... })