2017-03-31 3 views
2

Ich habe einen komplizierten und komplexen (nicht mein Code) Fabrik Anruf in Angular, dass, wenn verwendet, nicht dann Eigenschaft oder etwas zurückgibt, die verwendet werden kann, eine successCallback laufen Methode (Fehler selbst ist TypeError: Cannot read property 'then' of undefined). Ich bin nicht sicher, was die Ursache sein könnte, aber es gibt durchaus ein paar einzigartigen Komponenten des Anrufs, die die Ursache, wie die mehr verschachtelten $ http.post Aufrufe an den Web Service sein könnten.Aufruf zur Fabrik definierte Methode Rückkehr nicht definierten Wert/Versprechen

updateDocument: function(documentId, newFileData, appointmentFileName = null, appointmentCategory = null, appointmentId = null) { 
     //Get Existing Document Details (including Revision) 
     //document. 
     documentsService.documentsFactory.getDocumentRecordById(documentId).then(
      function successCallback(response) { 
       console.debug("Response", response); 

       var NextRevision = parseInt(response.data.revision) + 1; 

       if ((appointmentCategory === null) || (appointmentCategory === undefined)) { 
        appointmentCategory = response.data.category_id; 
       } 

       if ((appointmentId === null) || (appointmentId === undefined)) { 
        var ErrorObj = { 
         status: 10, 
         message: 'Appointment ID not defined.' 
        }; 
        return ErrorObj; 
       } 

       if ((appointmentFileName === null) || (appointmentFileName === undefined)) { 
        appointmentFileName = response.data.filename; 
       } 

       if ((newFileData === null) || (newFileData === undefined)) { 
        var ErrorObj = { 
         status: 11, 
         message: 'File Data not defined.' 
        }; 
        return ErrorObj; 
       } 

       var action = 'set_document_revision'; 
       var endpoint = cfg.url; 
       var sessionId = systemService.sessionService.getSessionId(); 

       var DocRevObj = { 
        session: sessionId, 
        document_revision: { 
         id: documentId, 
         file: newFileData, 
         filename: appointmentFileName, 
         revision: NextRevision       
        } 
       }; 

       var DocNodeObj = { 
        session: sessionId, 
        module: "Documents", 
        name_value_list: [{ 
         name: 'document_name', 
         value: appointmentFileName 
        }, { 
         name: 'category_id', 
         value: appointmentCategory 
        }, { 
         name: 'id', 
         value: documentId 
        }]      
       }; 

       var RevisionRequestParams = { 
        method: action, 
        input_type: "JSON", 
        response_type: "JSON", 
        rest_data: DocRevObj 
       }; 

       var NodeRequestParams = { 
        method: "set_entry", 
        input_type: "JSON", 
        response_type: "JSON", 
        rest_data: DocNodeObj 
       } 

       var headers = { 
        "Content-Type": "application/json" 
       }; 

       return $http.post(endpoint, RevisionRequestParams, headers).then(
        function successCallback(response2) { 
         console.debug("Successfully Replaced File", response2); 

         //Re-adjust the File Entry to match new changes 
         //(make a call to set_entry) 
         return $http.post(endpoint, NodeRequestParams, headers).then(
          function successCallback(response3) { 
           console.debug("Successfully Updated File", response3); 
           return response3; 
          }, 
          function errorCallback(response3) { 
           console.debug("Error", response3); 
           return response3 
          } 
         ); 

         return response2; 
        }, 
        function errorCallback(response2) { 
         console.debug("Error", response2); 
         return response2; 
        } 
       ); 
       console.debug("Success", response); 
       return response; 
      }, function errorCallback(response) { 
       console.debug("Error", response); 
       return response; 
      } 
     ); 
    } 

Der vorlegende Methodenaufruf (in einem Controller auf einem Klick-Ereignisse ausgelöst)

appointmentsService.appointmentsFactory.updateDocument(CurrentDocumentId, result, NewFileName, NewDocumentType, CurrentAppointmentID).then(
        function successCallback(response) { 
         //Success Callback Logic       
        }, 
        function errorCallback(response) { 

        }); 

Ist es möglich, dass der Ruf nach update in der Tat ist eine Rückkehr lange vor Ende der Versprechungen etwas schicken zurück? Wenn ja, was sind meine Optionen, um es zu umgehen?

Antwort

4

Ihre update Funktion nichts zurückgibt. Fügen Sie vor dem getDocumentRecordById-Aufruf eine Rückgabe hinzu.

var updateDocument = function(documentId, newFileData, appointmentFileName = null, appointmentCategory = null, appointmentId = null) { 
//Get Existing Document Details (including Revision) 
//document. 
return documentsService.documentsFactory.getDocumentRecordById(documentId).then( 
... 
0

Sie müssen das Versprechen Objekt wie folgt zurück:

updateDocument: function(documentId, newFileData, appointmentFileName = null, appointmentCategory = null, appointmentId = null) { 
    //Get Existing Document Details (including Revision) 
    //document. 
    return documentsService.documentsFactory.getDocumentRecordById(documentId).then(
     function successCallback(response) { 
      console.debug("Response", response); 

      var NextRevision = parseInt(response.data.revision) + 1; 

      if ((appointmentCategory === null) || (appointmentCategory === undefined)) { 
       appointmentCategory = response.data.category_id; 
      } 

      if ((appointmentId === null) || (appointmentId === undefined)) { 
       var ErrorObj = { 
        status: 10, 
        message: 'Appointment ID not defined.' 
       }; 
       return ErrorObj; 
      } 

      if ((appointmentFileName === null) || (appointmentFileName === undefined)) { 
       appointmentFileName = response.data.filename; 
      } 

      if ((newFileData === null) || (newFileData === undefined)) { 
       var ErrorObj = { 
        status: 11, 
        message: 'File Data not defined.' 
       }; 
       return ErrorObj; 
      } 

      var action = 'set_document_revision'; 
      var endpoint = cfg.url; 
      var sessionId = systemService.sessionService.getSessionId(); 

      var DocRevObj = { 
       session: sessionId, 
       document_revision: { 
        id: documentId, 
        file: newFileData, 
        filename: appointmentFileName, 
        revision: NextRevision       
       } 
      }; 

      var DocNodeObj = { 
       session: sessionId, 
       module: "Documents", 
       name_value_list: [{ 
        name: 'document_name', 
        value: appointmentFileName 
       }, { 
        name: 'category_id', 
        value: appointmentCategory 
       }, { 
        name: 'id', 
        value: documentId 
       }]      
      }; 

      var RevisionRequestParams = { 
       method: action, 
       input_type: "JSON", 
       response_type: "JSON", 
       rest_data: DocRevObj 
      }; 

      var NodeRequestParams = { 
       method: "set_entry", 
       input_type: "JSON", 
       response_type: "JSON", 
       rest_data: DocNodeObj 
      } 

      var headers = { 
       "Content-Type": "application/json" 
      }; 

      return $http.post(endpoint, RevisionRequestParams, headers).then(
       function successCallback(response2) { 
        console.debug("Successfully Replaced File", response2); 

        //Re-adjust the File Entry to match new changes 
        //(make a call to set_entry) 
        return $http.post(endpoint, NodeRequestParams, headers).then(
         function successCallback(response3) { 
          console.debug("Successfully Updated File", response3); 
          return response3; 
         }, 
         function errorCallback(response3) { 
          console.debug("Error", response3); 
          return response3 
         } 
        ); 

        return response2; 
       }, 
       function errorCallback(response2) { 
        console.debug("Error", response2); 
        return response2; 
       } 
      ); 
      console.debug("Success", response); 
      return response; 
     }, function errorCallback(response) { 
      console.debug("Error", response); 
      return response; 
     } 
    ); 
} 
0

Sie sollten das Factory-Objekt basierend auf dem Code zurück. Beispiel ...

app.factory('factoryName', function() { 
    var factoryObj= { 
     save: function() { 
     }, 
    update: function() { 
    } 
    }; 
    return factoryObj; //return object 
}); 

Sie können den Code wie unten zurück.

return { 
updateDocument: function(documentId, newFileData, appointmentFileName = null, appointmentCategory = null, appointmentId = null) { 
     //Get Existing Document Details (including Revision) 
     //document. 
     documentsService.documentsFactory.getDocumentRecordById(documentId).then(
      function successCallback(response) { 
       console.debug("Response", response); 

       var NextRevision = parseInt(response.data.revision) + 1; 

       if ((appointmentCategory === null) || (appointmentCategory === undefined)) { 
        appointmentCategory = response.data.category_id; 
       } 

       if ((appointmentId === null) || (appointmentId === undefined)) { 
        var ErrorObj = { 
         status: 10, 
         message: 'Appointment ID not defined.' 
        }; 
        return ErrorObj; 
       } 

       if ((appointmentFileName === null) || (appointmentFileName === undefined)) { 
        appointmentFileName = response.data.filename; 
       } 

       if ((newFileData === null) || (newFileData === undefined)) { 
        var ErrorObj = { 
         status: 11, 
         message: 'File Data not defined.' 
        }; 
        return ErrorObj; 
       } 

       var action = 'set_document_revision'; 
       var endpoint = cfg.url; 
       var sessionId = systemService.sessionService.getSessionId(); 

       var DocRevObj = { 
        session: sessionId, 
        document_revision: { 
         id: documentId, 
         file: newFileData, 
         filename: appointmentFileName, 
         revision: NextRevision       
        } 
       }; 

       var DocNodeObj = { 
        session: sessionId, 
        module: "Documents", 
        name_value_list: [{ 
         name: 'document_name', 
         value: appointmentFileName 
        }, { 
         name: 'category_id', 
         value: appointmentCategory 
        }, { 
         name: 'id', 
         value: documentId 
        }]      
       }; 

       var RevisionRequestParams = { 
        method: action, 
        input_type: "JSON", 
        response_type: "JSON", 
        rest_data: DocRevObj 
       }; 

       var NodeRequestParams = { 
        method: "set_entry", 
        input_type: "JSON", 
        response_type: "JSON", 
        rest_data: DocNodeObj 
       } 

       var headers = { 
        "Content-Type": "application/json" 
       }; 

       return $http.post(endpoint, RevisionRequestParams, headers).then(
        function successCallback(response2) { 
         console.debug("Successfully Replaced File", response2); 

         //Re-adjust the File Entry to match new changes 
         //(make a call to set_entry) 
         return $http.post(endpoint, NodeRequestParams, headers).then(
          function successCallback(response3) { 
           console.debug("Successfully Updated File", response3); 
           return response3; 
          }, 
          function errorCallback(response3) { 
           console.debug("Error", response3); 
           return response3 
          } 
         ); 

         return response2; 
        }, 
        function errorCallback(response2) { 
         console.debug("Error", response2); 
         return response2; 
        } 
       ); 
       console.debug("Success", response); 
       return response; 
      }, function errorCallback(response) { 
       console.debug("Error", response); 
       return response; 
      } 
     ); 
    } 
} 
Verwandte Themen