序列是什么

模块a-sequence提供了序列特性,可以为某个具体业务提供唯一序列值,比如原子在新建时分配唯一名称

声明序列

在模块的meta中配置序列参数

src/module-vendor/test-party/backend/src/meta.js

  1. 1sequence: {
  2. 2 providers: {
  3. 3 test: {
  4. 4 bean: 'test',
  5. 5 start: 0,
  6. 6 },
  7. 7 },
  8. 8},
名称 说明
test 序列名称
test.bean 序列对应的Bean组件
test.start 起始值

定义Bean组件

src/module-vendor/test-party/backend/src/bean/sequence.test.js

  1. 1module.exports = ctx => {
  2. 2 class Sequence {
  3. 3
  4. 4 async execute(context) {
  5. 5 let value = context.value;
  6. 6 return ++value;
  7. 7 }
  8. 8
  9. 9 }
  10. 10
  11. 11 return Sequence;
  12. 12};
  • 返回值:新序列值

  • 参数

名称 说明
context.value 序列的当前值

注册Bean组件

src/module-vendor/test-party/backend/src/beans.js

  1. 1const sequenceTest = require('./bean/sequence.test.js');
  2. 2
  3. 3module.exports = app => {
  4. 4 const beans = {
  5. 5 // sequence
  6. 6 'sequence.test': {
  7. 7 mode: 'ctx',
  8. 8 bean: sequenceTest,
  9. 9 },
  10. 10 };
  11. 11 return beans;
  12. 12};
注册名称 场景 所属模块 global beanFullName
test sequence test-party false test-party.sequence.test

使用序列

模块a-sequence提供了全局Bean组件sequence,可以便利的操作序列

src/module-vendor/test-party/backend/src/controller/test/feat/sequence.js

current

  1. 1let current = await this.ctx.bean.sequence.current('test');

next

  1. 1let next = await this.ctx.bean.sequence.next('test');

reset

  1. 1await this.ctx.bean.sequence.reset('test');

跨模块访问

可以访问其他模块的序列值

  1. 1// other module's sequence
  2. 2const moduleSequence = this.ctx.bean.sequence.module(`test-party`);
  3. 3// next
  4. 4let next = await moduleSequence.next('test');