无法将新资源数组的所有元素添加到注册表

Not able to add all elements of an array of new resources to the registry

我正在尝试使用 getParticipantRegistry().addAll() 将数组的所有元素添加到 composer-playground 上的注册表中,但它只是将前两个元素添加到注册表中,而不是数组的所有元素。如控制台输出所示,数组中有 4 个元素,但只有前两个元素被添加到注册表中。

代码:

/**
 * Add Students
 * @param {org.paradox.participants.AddStudents} addStudents
 * @transaction
 */

async function addStudents(transaction) {
  var factory = await getFactory()
  var namespace = 'org.paradox.participants'
  var studentRegistry = await getParticipantRegistry(namespace + '.Students')
  var students = []
  for (var studentID of ['1', '2', '3', '4']) {
    var student = factory.newResource(namespace, 'Students', studentID)
    student.name = 'Student ' + studentID
    if (studentID % 2 != 0)
      student.subjects = ['Science', 'Maths']
    else
      student.subjects = ['SocialScience', 'English', 'Hindi']
    students.push(student)
  }
  console.log(students)
  studentRegistry.addAll(students)
}

控制台:

@JS : IdentityManager         :<ResourceManager>()      Binding in the tx names and impl 
main.0dbfc9903b7dba442744.bundle.js:1:937780
[…]
0: Object { "$namespace": "org.paradox.participants", "$type": "Students", "$identifier": "1", … }
1: Object { "$namespace": "org.paradox.participants", "$type": "Students", "$identifier": "2", … }
2: Object { "$namespace": "org.paradox.participants", "$type": "Students", "$identifier": "3", … }
3: Object { "$namespace": "org.paradox.participants", "$type": "Students", "$identifier": "4", … }
length: 4
__proto__: Array []
main.0dbfc9903b7dba442744.bundle.js%20line%201%20%3E%20Function%20line%203%20%3E%20eval:35:3
@JS : EngineTransactions      :createHistorianRecord()  created historian record 
main.0dbfc9903b7dba442744.bundle.js:1:937780

我没有看到你的模型,但鉴于 Students 是:

participant Students identified by studentId {
  o String studentId
  o String name
  o String[] subjects
}

这是我在 Composer v0 中使用的代码。16.x 使用在线 Playground 的代码 https://composer-playground.mybluemix.net/:

 var factory = await getFactory();
 var namespace = 'org.paradox.participants';

  var students = [];

  var myArray = ["1","2","3","4"];


  for (var studentID in myArray) {

    var student = factory.newResource(namespace, 'Students', studentID);
    student.name = 'Student ' + studentID;
    if (studentID % 2 != 0) 
      student.subjects = ['Science', 'Maths'];
    else 
      student.subjects = ['SocialScience', 'English', 'Hindi'];

    students.push(student);

  } // end for

  console.log('student array is ' + students);
  return getParticipantRegistry(namespace + '.Students') 
      .then(function(studentRegistry) {
      studentRegistry.addAll(students)
  });

studentRegistry.addAll(students) 之前应该有一个 await 关键字,因为 studentRegistry.addAll(students) 是一个异步方法。
最后代码应该是这样的:

/**
 * Add Students
 * @param {org.paradox.participants.AddStudents} addStudents
 * @transaction
 */

async function addStudents(transaction) {
  var factory = await getFactory()
  var namespace = 'org.paradox.participants'
  var studentRegistry = await getParticipantRegistry(namespace + '.Students')
  var students = []
  for (var studentID of ['1', '2', '3', '4']) {
    var student = factory.newResource(namespace, 'Students', studentID)
    student.name = 'Student ' + studentID
    if (studentID % 2 != 0)
      student.subjects = ['Science', 'Maths']
    else
      student.subjects = ['SocialScience', 'English', 'Hindi']
    students.push(student)
  }
  console.log(students)
  await studentRegistry.addAll(students)
}