UNPKG

hubs

Version:

``` Caryl ------ courier3 / \ / \ courier1 courier2

80 lines (63 loc) 2.05 kB
const Context = require('./context') const EventEmitter = require('events') const promiseTree = require('./promiseTree') /** * Courier * @desc lifecycle: 一个请求配置有一个实例, 存在于应用的整个生命周期 * @class Courier * @extends EventEmitter */ class Courier extends EventEmitter { /** * Creates an instance of Courier. * * @memberof Courier */ constructor(items, protocol) { super() this.items = Context.preprocess(items, protocol) } applyPlugin(plugin){ plugin.call(this) } /** * 发送信息 * * @param {any} context * @member uri * @member params * @member shoudStop * @member model * @memberof Courier */ async send(context, key) { try { var cur = context.reqItems[key] this.emit('courierBeforeParamReady', context, key) cur.params = cur.prepareParams && cur.prepareParams(cur, key,context) this.emit('courierParamsReady', context, key) this.emit('courierBeforeRequest', context, key) var payload = await context.reqItems[key].requestor.call(context, cur) context.payloads[key] = payload this.emit('courierAfterRequest', context, key) context.payloads[key] = cur.processResult && cur.processResult(context.payloads[key], key,context) this.emit('courierResultReady', context, key) } catch (error) { context.errs[key] = error this.emit('courierError', context, error) } return context } async deliver(state) { var context = new Context(this.items, state) this.emit('contextReady', context) this.emit('beforeRequest', context) await promiseTree(this.items, ({key})=>{ return this.send(context, key) }) this.emit('afterRequest', context) this.emit('resultReady', context) return context } } module.exports = Courier