如何解决Hyperledger Fabric,golang 中的嵌套结果迭代器 - 如何?链码启动失败
我已经定义了一个结构体
// HistoryQueryResult structure used for returning result of history query
type BookingHistoryQueryResult struct {
CarRecord *Car `json:"record"`
BookingRecord *Booking `json:"record"`
TxId string `json:"txId"`
Timestamp time.Time `json:"timestamp"`
}
我正在尝试如下迭代
// QueryHistoryBooking returns all bookings found in world state
func (s *SmartContract) GetBookingHistory(ctx contractapi.TransactionContextInterface,carNumber string) ([]BookingHistoryQueryResult,error) {
var historyResults []BookingHistoryQueryResult
var carKey string
queryString := fmt.Sprintf("{\"selector\":{\"docType\":\"booking\",\"carNumber\":\"%s\"}}",carNumber)
queryBookingresultsIterator,err := ctx.GetStub().GetQueryResult(queryString)
if err != nil {
return nil,err
}
for queryBookingresultsIterator.HasNext() {
queryResponse,err := queryBookingresultsIterator.Next()
if err != nil {
return nil,err
}
bookingId := queryResponse.Key
resultsIterator,err := ctx.GetStub().GetHistoryForKey(bookingId)
for resultsIterator.HasNext() {
queryHistoryResponse,err := resultsIterator.Next()
if err != nil {
return nil,err
}
booking := new(Booking)
_ = json.Unmarshal(queryResponse.Value,booking)
timestamp,err := ptypes.Timestamp(queryHistoryResponse.Timestamp)
if err != nil {
return nil,err
}
// This is the portion that is causing the trouble
carKey = booking.CarNumber
car,err := s.QueryCar(ctx,carKey)
if err != nil {
return nil,err
}
historyResult := BookingHistoryQueryResult{
TxId: queryHistoryResponse.TxId,Timestamp: timestamp,BookingRecord: booking,CarRecord: car,}
historyResults = append(historyResults,historyResult)
}
}
return historyResults,nil
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。