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 (将#修改为@)