У меня следующая проблема. Я пытаюсь написать функцию цепочки кода, которая запрашивает мое личное хранилище данных и возвращает подмножество состояний на основе некоторых проверок атрибутов. Давайте возьмем пример fabcar и предположим, что состояния автомобилей в моей коллекции являются частными. Я хотел бы запросить все автомобили, которые удовлетворяют определенным условиям на основе их атрибутов. Поэтому я подумал, что смогу l oop пройти через состояния, аналогично функции queryAllCars, и затем получить доступ к полям после того, как я его проанализировал. Ниже приводится мой подход для другого варианта использования. Это всегда выдает "не могу прочитать цвет свойства неопределенного". Я не понимаю, как это может быть неопределенным. Без проверки свойств есть запись с соответствующими свойствами (цвет, марка, модель ...) в формате JSON.
async queryAllPrivateCarsWithSomeConditions(ctx) {
const startKey = 'CAR0';
const endKey = 'CAR999';
const range = await ctx.stub.getPrivateDataByRange(startKey, endKey);
const allResults = [];
while (true) {
const res = await range.iterator.next();
if (res.value && res.value.value.toString()) {
console.log(res.value.value.toString('utf8'));
const Key = res.value.key;
let car;
let color;
try {
car = JSON.parse(res.value.value.toString('utf8'));
color = CarRecord.color;
if(Color == "x"){
//whatever
}
} catch (err) {
console.log(err);
Record = res.value.value.toString('utf8');
}
allResults.push({ Key, Record });
}
if (res.done) {
console.log('end of data');
await range.iterator.close();
console.info(allResults);
return JSON.stringify(allResults);
}
}
}
Кажется, что возможно получить доступ к свойствам в случае одного запроса состояния, как в примере changeCarOwner, где я могу получить доступ к цвету объекта после анализа.
code
async changeCarOwner(ctx, carNumber, newOwner) {
console.info('============= START : changeCarOwner ===========');
const carAsBytes = await ctx.stub.getState(carNumber); // get the car from chaincode state
if (!carAsBytes || carAsBytes.length === 0) {
throw new Error(`${carNumber} does not exist`);
}
const car = JSON.parse(carAsBytes.toString());
car.owner = newOwner;
await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car)));
console.info('============= END : changeCarOwner ===========');
}