2017-08-14 2 views
2

Ich habe diesen Code, der ein Teil eines Wrappers für Pipl api ist und ich bin immer diese Fehlermeldung:Typeerror: Rückruf ist keine Funktion -

dieser Haupt Code macht eine GET-Anforderung und gibt die Informationen von der Rückseite API

Wir freuen uns auf die von Ihnen geholfen bekommen :)

return callback(err, JSON.parse(body) || body); 
TypeError: callback is not a function 

Was ist hier falsch ist? Wie kann ich diesen Fehler beheben?

(function() { 
    var _ = require('lodash') 
     , request = require('request') 
     , util = require('util') 
     , url = require('url'); 

    var Handler = function(subClass) { 
     this.createCall = function(method, path, options, callback) { 
      return function(config) { 
       if (_.isFunction(options)) { 
        callback = options; 
        options = {}; 
       } 
       path = url.format({ 
        pathname: path, 
        query: options 
       }); 
       path = url.resolve(config.api_url, path); 
       console.log(path) 

       var parameters = { 
        url: path, 
        method: method 
       }; 

       request(parameters, function(err, response, body) { 
        return callback(err, JSON.parse(body) || body); 
       }); 
      } 
     }; 

     _.merge(subClass, this); 
     return this; 
    }.bind(this); 

    module.exports = Handler; 
}).call(this); 
+0

Wie lösen rufen Sie 'createCall'? Sieht so aus, als ob alles, was du passierst, dem "Callback" zugewiesen ist, ist keine Funktion ... –

+0

Ich verstehe, aber wie wird es in seiner endgültigen Form sein? –

+0

Bitte geben Sie einen Link für den Wrapper, den Sie verwenden, und wie verwenden Sie es. –

Antwort

0

Das Problem tritt auf, weil die search.query Funktion Optionen und Rückruf akzeptiert. aber in NPM Dokumentation heißt es, dass es type, options, callback

Scheck github

akzeptiert Dieser Fehler bedeutet, dass Sie versuchen, etwas als eine Funktion aufzurufen, während es nicht eine Funktion ist. In Ihrem Fall besteht das Problem darin, dass Sie nur einen Parameter, d. H. "Dateipfad", gesendet haben und die anzurufende Funktion nicht übergeben haben.

Ich denke Rückruf vorbei (Karte) in this.xmlObjectRepositoryLoader (filePath) könnte Ihre Fehler

0

Wenn Sie createCall Funktion aufrufen, sollten Sie 4 Parameter übergeben, und der letzte Parameter eine Funktion sein sollte (was später aufgerufen). Und es sieht so aus, als würde die Zeile callback = options; nicht viel Sinn ergeben.

+0

Ich verstehe, aber wie soll es aussehen? –