searchOrder.callApiBasedOnSearchBy = function(searchBy,responseObj) {
    var recordsFinalObj = {
      recordsArray: [],
      isOrderList: false
    };
    var finalJson = {};
    var self = this;
    var mapSearchByToApi = {
      'INVOICE_NUMBER': function(responseObj) {
      },
      'ORDER_NUMBER': function(responseObj) {
        self.orderDetailsModel.set("id",responseObj.id);
        self.orderDetailsModel.fetch({}).then(function(orderDetailsResponse) {
          var orderDetails = orderDetailsResponse.records[0];
          if(typeof orderDetails.packet_ids !== 'undefined') {
            var packet_id = orderDetails.packet_ids[0];
            self.packetDetailsModel.set("id",packet_id);
            self.packetDetailsModel.fetch({}).then(function(packetDetailsResponse) {
              console.log(packetDetailsResponse);
              finalJson = packetDetailsResponse.records[0];
              finalJson.order_items = orderDetails.order_items;
              console.log(finalJson);
              return finalJson;
            }, function(error) {
              console.log("Error in Order Item:"+error);
            });
          }
        }, function(error) {
          console.log("Error in Order:"+error);
        })
      },
      'AWB_NUMBER': function(responseObj) {
      },
      'CHANNEL_ORDER_ID': function(responseObj) {
      }
    }
    if(mapSearchByToApi[searchBy]) {
      finalJson = mapSearchByToApi[searchBy](responseObj);
      recordsFinalObj.recordsObj = finalJson;
      return recordsFinalObj;
    }
  }
I want to return the final json to my UI. However the control of the loop is returned before my promises are executed.
 
    